Python - 使用RegEx从字符串中提取模式

use*_*399 5 python regex

我在变量中有一个字符串a如下:

a = 'foo(123456) together with foo(2468)'
Run Code Online (Sandbox Code Playgroud)

我想用"re"来从字符串中提取foo(123456)foo(2468).

我有两个问题:

  1. 使用正确的正则表达式是什么?foo(.\*)似乎不起作用,因为它123456)foo(2468as 一起对待.*
  2. 如何提取两个foo?

Sha*_*ank 6

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)

两件事情:

  1. .*?是懒惰的量词.它的行为与贪婪的量词(.*)相同,除了它试图匹配字符串中从左到右可能的最少字符数.请注意,如果要在括号中匹配至少一个字符,则需要使用.+?.

  2. 使用\(\)代替(并且)因为括号通常在正则表达式中用于指示捕获组,所以如果要按字面顺序匹配括号,则必须在它们之前使用转义字符,即反斜杠.


Mar*_*cin 5

您可以将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(.*)不起作用().你需要逃脱它们,就像我上面所做的那样.