FRO文本,「數字名」,如:匹配字母而不是數字,也沒有空間與格式正則表達式
"12232 letter" but not this one: "12232 12"
這個表達式工作正常兩種:
\d{3,}\s+\D'
不過是有什麼額外的空間,它停止工作:
re.search('\d{3,}\s+\D','12232 1111').group()
如果回報:
'12232 '
的比賽。
FRO文本,「數字名」,如:匹配字母而不是數字,也沒有空間與格式正則表達式
"12232 letter" but not this one: "12232 12"
這個表達式工作正常兩種:
\d{3,}\s+\D'
不過是有什麼額外的空間,它停止工作:
re.search('\d{3,}\s+\D','12232 1111').group()
如果回報:
'12232 '
的比賽。
雖然你的問題是相當不明確,從標題,你可能需要使用包含字母範圍一套[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是偉大的幫助來構建,測試和分享正則表達式。
問題是\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!")
你的要求是不清楚。 我猜的要求是:
一個字\ d {3} \ S * [A-ZA-Z] +
它看起來相當清晰。 '\ D'只需在三位或更多位數後匹配第二個空格,並將其稱爲一天。 –