2015-11-13 160 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)[^)] *)* '。 –

相關問題