1

我一直在尝试匹配这样的东西

mystring = "kdjf4kf., kfg. (KFJG)"
regex = r'.+\(\w+\)'  

但它不工作,它没有找到任何东西。我想推断 KFJG。我该怎么做?

例子:

>>> a = "Amazon (AMZN)"
>>> regex = '.?(\w+)'
>>> match = re.match(regex, a)
>>> match.group(0)  
'Amazon'  
>>> match.group(1)  
'mazon'
4

2 回答 2

4

因为您忘记将匹配项包含在捕获组中

>>> re.findall(r'.+\((\w+)\)', mystring)
['KFJG']
于 2012-12-12T06:21:45.020 回答
1
>>> regex = '.?(\w+)'  

.? -> 这意味着可能有一个字符/数字 (\w+) -> 这意味着捕获一个字符直到出现空格

match.group(0)将返回您想要匹配的字符串,这就是您看到“Amazon”的原因

match.group(1)将返回字符串中匹配的第一个括号分组的内容,

'.?(\w+)'意味着匹配一个字符串(mazon),它之前可能有一个字符(A)。

你代码中的括号在正则表达式中有另一个含义,这意味着将内容分组以供以后使用,而不是作为模式匹配在这里。

你真正想要的是捕获括号内的内容,括号需要通过放置“\”来定期转义

>>> regex = '.*\((\w+)\)'
>>> match = re.match(regex, a)
>>> match.group(0)
'Amazon (AMZN)'
>>> match.group(1)
'AMZN'

'.*\((\w+)\)'让我们把它分解成细节

... \(_____\)-> 这意味着匹配括号

..... (___) -> 这意味着 match.group(1) 的内容内部分组

.......\w+ -> 这意味着匹配一个或多个字符

于 2012-12-12T07:02:56.613 回答