我一直试图匹配这样的东西
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'
答案 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 + - >这意味着匹配一个或多个字符