[英]regex: match everything until `:` or `(`
我希望正则表达式可以获取所有内容,直到首次出现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演示 。
模式匹配:
^
-字符串的开头 ([^:(]+?)
-组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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.