繁体   English   中英

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

[英]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组。

Python 3演示

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)

^[^(:]*[^(:\\s]

在此处输入图片说明

此版本不包含结尾的':'或'\\ s'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM