匹配括号与Python

时间:2012-12-12 06:16:56

标签: python regex

我一直试图匹配这样的东西

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'

2 个答案:

答案 0 :(得分:4)

因为您忘记在capturing group

中包含匹配项
>>> re.findall(r'.+\((\w+)\)', mystring)
['KFJG']

答案 1 :(得分:1)

>>> regex = '.?(\w+)'  

。? - >这意味着可能有一个字符/数字 (\ w +) - >这意味着捕捉角色直到太空出现

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

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

'.?(\w+)'表示匹配字符串(A)之前可能有字符(A)的字符串。

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

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

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

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

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

..... (___) - >这意味着match.group(1)

的内容组

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