Skip to main content
 首页 » 编程设计

python之正则表达式:匹配所有内容,直到 `:` 或 `(`

2025年05月04日31bonelee

我想要一个正则表达式来获取所有内容,直到第一次出现 char : 或 char (,前面有一个可选的空格。

拿这段文字:

foo : bar 
foo bar: baz 
foo (bar): baz 

预期:

<foo>: bar 
<foo bar>: baz 
<foo> (bar): baz 

我尝试了这个 (.*[:\(]),但是这给出了:

<foo :> bar 
<foo bar:> baz 
<foo (bar):> baz 

参见 https://regex101.com/r/sR4hA5/1

我正在使用 Python 3.5。

有什么想法吗?

请您参考如下方法:

你可以使用

^([^:(]+?)(\s*[:(]) 

并替换为<\1>\2 .查看regex demo .

模式匹配:

  • ^ - 字符串开始
  • ([^:(]+?) - 第 1 组匹配除 : 以外的 1 个或多个字符和 (但尽可能少到第一个......
  • (\s*[:(]) - 第 2 组:零个或多个空格后跟 :或 ( .

惰性量词 +?需要强制“尾随”空格落入第 2 组。

Python 3 demo :

import re 
p = re.compile(r'^([^:(]+?)(\s*[:(])', re.MULTILINE) 
s = "foo : bar\nfoo bar: baz\nfoo (bar): baz" 
result = p.sub(r"<\1>\2", s) 
print(result)