2015-11-13 243 views
-1

需要的是通过PythonPython的 - 正则表达式 - 括号和大写字母

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

最接近的事情,我在他们之后

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

发现支架和数字到

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

正则表达式语句已经是

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

和不正确地匹配

而且它需要通过资本分割括号和数字之间的话

+1

现在唯一未知的是你是否也有像''你好输入(你好,世界(S))55Example(文本(这里)更多的文本)23Something''。 –

回答

3

你需要躲避支架也按顺序下一个定义图案的bracktes到匹配一个或多个数字。 [A-Z]将不匹配数字字符,它只匹配大写字母。 (,)是正则表达式中的特殊元字符,它表示捕获组的开始(和结束)

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

[^()]*否定的字符类匹配任何字符,但不是(),零次或多次。 .*?一旦找到匹配就停止匹配的非贪婪表单。

例子:

>>> 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'] 
+0

我要快速编辑问题,因为我忘记了一些东西,但是您已经正确回答了......可以将语句输出到大写字母之间,所以Hello(World)55ExampleTest(Text)23会变成['Hello',' (世界)55','示例','测试','(文本)23']或者我应该有一些其他的Python逻辑来解决这个问题 – eatingcereal

+0

@Hooner好吧,你会编辑什么? –

+0

看到我的更新........ –

2

同你说的问题是,()是特殊的术语,其组号码[.*?]之前的所有条款和你”之后没有将数字分组。因此,您需要使用\转义括号,然后将所有数字(\d+)分组。我相信所有你需要的是:

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

而不是'。*?',您最好使用展开的[[^]] *(?:\)(?!\ d)[^)] *)* '。 –

相关问题