我想要一个正则表达式来获取所有内容,直到第一次出现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。
有什么想法吗?
答案 0 :(得分:4)
您可以使用
^([^:(]+?)(\s*[:(])
并替换为<\1>\2
。请参阅regex demo。
模式匹配:
^
- 字符串开头([^:(]+?)
- 第1组匹配除:
和(
以外的1个或多个字符,但在第一个字符之前尽可能少... (\s*[:(])
- 第2组:零个或多个空格后跟:
或(
。需要使用延迟量词+?
来强制执行&#34;尾随&#34;空间属于第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)
答案 1 :(得分:1)