我在变量中有一个字符串a如下:
a = 'foo(123456) together with foo(2468)'
Run Code Online (Sandbox Code Playgroud)
我想用"re"来从字符串中提取foo(123456)和foo(2468).
我有两个问题:
foo(.\*)似乎不起作用,因为它123456)与foo(2468as 一起对待.* import re
pattern = re.compile(r'foo\(.*?\)')
test_str = 'foo(123456) together with foo(2468)'
for match in re.findall(pattern, test_str):
print(match)
Run Code Online (Sandbox Code Playgroud)
两件事情:
.*?是懒惰的量词.它的行为与贪婪的量词(.*)相同,除了它试图匹配字符串中从左到右可能的最少字符数.请注意,如果要在括号中匹配至少一个字符,则需要使用.+?.
使用\(和\)代替(并且)因为括号通常在正则表达式中用于指示捕获组,所以如果要按字面顺序匹配括号,则必须在它们之前使用转义字符,即反斜杠.
您可以将findall与以下表达式一起使用r'(foo\(\d+\))'::
import re
a = 'foo(123456) together with foo(2468)'
for v in re.findall(r'(foo\(\d+\))', a):
print(v)
Run Code Online (Sandbox Code Playgroud)
结果是:
foo(123456)
foo(2468)
Run Code Online (Sandbox Code Playgroud)
你的表现foo(.*)不起作用().你需要逃脱它们,就像我上面所做的那样.