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'只需在三位或更多位数后匹配第二个空格,并将其称为一天。 –