2017-08-03 23 views
0

FRO文本,「數字名」,如:匹配字母而不是數字,也沒有空間與格式正則表達式

"12232 letter" but not this one: "12232 12" 

這個表達式工作正常兩種:

\d{3,}\s+\D' 

不過是有什麼額外的空間,它停止工作:

re.search('\d{3,}\s+\D','12232 1111').group() 

如果回報:

'12232 ' 

的比賽。

+0

它看起來相當清晰。 '\ D'只需在三位或更多位數後匹配第二個空格,並將其稱爲一天。 –

回答

2

雖然你的問題是相當不明確,從標題,你可能需要使用包含字母範圍一套[a-zA-Z]+

>>> re.search(r"[a-zA-Z]+", "12232 letter").group() 
'letter' 

或者,嘗試用()明確分組,然後讓該組的數量

>>> re.search(r"(\d{3,})\s+\D",'12232 1111').group(1) 
'12232' 

或者,你可以嘗試.findall,這將返回每次運行時發現

>>> re.findall(r"\d+", '12232 1111') 
['12232', '1111'] 

最後,該網站https://regex101.com是偉大的幫助來構建,測試和分享正則表達式。

1

問題是\D也匹配所有與\s匹配的字符。您需要從\D減去\s模式。 [^\d\s]:它可以通過將\D成其否定的字符類等效[^\d]並加入\s到它可以容易地實現。

使用

m = re.search('\d{3,}\s+[^\d\s]','12232 1111') 
if m: 
    print(m.group()) 
else: 
    print("No match!") 

Python demo online

2

你的要求是不清楚。 我猜的要求是:

  • 許多三個或更多位數
  • 後跟一個或多個空格
  • 其次是由一個或多個字母只

一個字\ d {3} \ S * [A-ZA-Z] +

相關問題