Python - 正则表达式 - 括号和大写字母

时间:2015-11-13 09:51:15

标签: python regex

需要一个在其后面找到括号和数字的正则表达式语句

 'Hello(World)55Example(Text)23Something'

['(World)55','(Text)23']

通过python

matchs = re.findall(*STATEMENT*, 'Hello(World)55Example(Text)23Something')

我最接近的是

'(.*?)[A-Z]'

并且没有正确匹配

它还需要通过Capitals

在括号和数字之间拆分

2 个答案:

答案 0 :(得分:3)

您需要转义括号并定义括号旁边的图案以匹配一个或多个数字。[A-Z]不匹配数字字符,它只匹配大写字母。 ()是正则表达式中的特殊元字符,表示捕获组的开始(和结束)

matchs = re.findall(r'\([^()]*\)\d+', 'Hello(World)55Example(Text)23Something')

[^()]*否定了char类,它匹配任何字符但不匹配(),零次或多次。 .*?非贪婪形式,一旦找到匹配就会停止匹配。

示例:

>>> import re
>>> re.findall(r'\([^()]*\)\d+', 'Hello(World)55Example(Text)23Something')
['(World)55', '(Text)23']
>>> re.findall(r'\(.*?\)\d+', 'Hello(World)55Example(Text)23Something')
['(World)55', '(Text)23']

<强>更新

>>> re.findall(r'\(.*?\)\d+|\w+', 'Hello(World)55Example(Text)23Something')
['Hello', '(World)55', 'Example', '(Text)23', 'Something']

答案 1 :(得分:2)

您的陈述存在的问题是()是在数字[.*?]之前对所有字词进行分组的特殊字词,并且您没有对其后的数字进行分组。因此,您需要使用\转义括号,然后将所有数字(\d+)分组。我相信你所需要的只是:

>>> import re
>>> matchs = re.findall(r'(\(.*?\)\d+)', 'Hello(World)55Example(Text)23Something')
>>> print matchs
['(World)55', '(Text)23']