2014-03-06 26 views
-1

我有一個簡單的正則表達式的問題:正則表達式 - 如何捕捉多的話

給出一個字符串像"test-class"我應該用什麼樣的正則表達式得到['test','class'](在python上下文)

+0

's.split(' - ')'...... – devnull

+0

我同意,如果只有'-'分隔單詞,就不需要正則表達式。但是,如果在單詞之間也存在逗號,點或空格,則正則表達式會很有用。 – Theox

+1

這裏的目標是什麼?在'-'上分割?要查找所有沒有短劃線的文字塊?當有數字,其他標點符號和換行符時會發生什麼?你需要給我們樣本輸入,期望的輸出,包括*例外*,如果有的話。 –

回答

2

你並不需要一個正則表達式;只需使用str.split()

>>> 'test-class'.split('-') 
['test', 'class'] 

一個正則表達式的解決方案仍然是分裂:

>>> import re 
>>> re.split(r'-', 'test-class') 
['test', 'class'] 
+0

我特別需要一個正則表達式;) – user3264316

+0

@ user3264316:爲什麼你特別需要一個正則表達式? –

+0

@ user3264316:你*可悲*在這裏指定了問題,順便說一句。我只能假設你想用破折號分割輸入,而文本其餘部分包含的內容並不重要。 –

0

([a-zA-Z]*)將足以捕獲字符串的每一個字。這裏

+2

每一個字,和一些空字符串啓動。使用'+'代替'*' –

1
"(\w+)"g 

例如:http://regex101.com/r/mV9cE2

\w將匹配所有字母數字字符的返回組

g修改:全球。

總之你定義一個你想要的東西相匹配的正則表達式:所有的比賽如果您在使用正則表達式的意圖(不要在第一場比賽返回)

0

。然後,您使用regex.matchall來查找字符串,並找回匹配的部分。

import re 
$ s = 'hello-world this 32' 
$ results = re.findall(r'[a-zA-Z]*', s) 
$ print(results) 
['hello', '', 'world', '', 'this', '', '', '', ''] 
# Now we can filter out the empty results. 
$ non_empty_results = [result for result in results if result] 
$ print(non_empty_results) 
['hello', 'world', 'this']