2017-02-03 18 views
0

這個問題可能是愚蠢的,我是新來的正則表達式,我有點卡住了。將多個單詞與正則表達式匹配,如果它們不包含數字

我有多個字符串,其中包含數字和單詞。我只想匹配單詞,如果它們不包含整數。

12 This Is A Test 9eifEf 12

從這一點,我想匹配This Is A Test

11 Stack 21deEh 12

從這一點,我想匹配Stack

使用RegExr,我想出了表達式.[a-z],它看起來像是有效,但它一次最多匹配2個字母,而不是空格。

對不起,該代碼請求。我不需要任何更多的模式。我感謝任何幫助。

+0

拆分字符串,並檢查是否所有字符都是字母('[x for s.split()in x.isalpha()]')。或者需求更具體? –

+0

你明白你的正則表達式爲什麼是錯誤的嗎? '.'會匹配任何字符(這不是你想要的),'[a-Z]'只會匹配一個小寫字母,而你忘記了'\ b'字分隔符。請參閱Willem的解決方案。 –

回答

3

只需使用:

\b[A-Za-z]+\b 

這裏:

  • \b是一個單詞邊界,使得我們不匹配以數字開頭的單詞;
  • [A-Za-z]是一個字符組,其中包含所有的上部和下部字母;和
  • +的意思是「一個或多個」。

如果你想返回字符串的話,你可以 - 爲@詹姆斯說 - 使用' '.join(..)

$ python3 
Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import re 
>>> rgx=re.compile(r'\b[A-Za-z]+\b') 
>>> text='12 This Is A Test 9eifEf 12' 
>>> rgx.findall(text) 
['This', 'Is', 'A', 'Test'] 
>>> ' '.join(rgx.findall(text)) 
'This Is A Test' 
+0

另外:'''.join(...)'返回組合字符串。 – James

+0

@詹姆斯:謝謝。更新了答案。 –

2

無需正則表達式,使用str.isalpha過濾掉出的數字的話分裂:

s = "12 This Is A Test 9eifEf 12" 

print(" ".join([x for x in s.split() if x.isalpha()])) 

給出:

This Is A Test 

雖然這不會保留多個空格。要做到這一點,只需要:

print(" ".join([x for x in s.split(" ") if not x or x.isalpha()])) 
+0

@ChrisRands:感謝編輯,但方括號是故意的。這樣做更快,就像看起來那樣令人驚訝。 –

相關問題