我想要一个正则表达式来获取所有内容,直到第一次出现 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 组。
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)
