roi*_*ere 3 python regex python-3.x
我想要一个正则表达式来获取所有内容,直到第一次出现 char:或 char (,前面有一个可选的空格。
以这段文字为例:
foo : bar
foo bar: baz
foo (bar): baz
Run Code Online (Sandbox Code Playgroud)
预期的:
<foo>: bar
<foo bar>: baz
<foo> (bar): baz
Run Code Online (Sandbox Code Playgroud)
我尝试过这个(.*[:\(]),但是这给出了:
<foo :> bar
<foo bar:> baz
<foo (bar):> baz
Run Code Online (Sandbox Code Playgroud)
请参阅https://regex101.com/r/sR4hA5/1
我正在使用Python 3.5。
任何想法?
您可以使用
^([^:(]+?)(\s*[:(])
Run Code Online (Sandbox Code Playgroud)
并替换为<\1>\2. 请参阅正则表达式演示。
模式匹配:
^- 字符串的开头([^:(]+?)- 第 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7803 次 |
| 最近记录: |