需要一个在其后面找到括号和数字的正则表达式语句
'Hello(World)55Example(Text)23Something'
到
['(World)55','(Text)23']
通过python
matchs = re.findall(*STATEMENT*, 'Hello(World)55Example(Text)23Something')
我最接近的是
'(.*?)[A-Z]'
并且没有正确匹配
它还需要通过Capitals
在括号和数字之间拆分答案 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']