2017-08-03 36 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] +

相关问题