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

时间:2016-05-27 19:01:43

标签: python regex python-3.x

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

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您可以使用

^([^:(]+?)(\s*[:(])

并替换为<\1>\2。请参阅regex demo

模式匹配:

  • ^ - 字符串开头
  • ([^:(]+?) - 第1组匹配除:(以外的1个或多个字符,但在第一个字符之前尽可能少...
  • (\s*[:(]) - 第2组:零个或多个空格后跟:(

需要使用延迟量词+?来强制执行&#34;尾随&#34;空间属于第2组。

Python 3 demo

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)

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

enter image description here

此版本不会抓取尾随的':'或'\ s'