我想要一个正则表达式来获取所有内容,直到第一次出现 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)
关于python - 正则表达式:匹配所有内容,直到 `:` 或 `(`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37490619/