匹配字母但不是数字,也不是正则表达式的空格

时间:2017-08-03 04:25:24

标签: regex

格式化文字,"数字名称"像:

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

这个表达式适用于两者:

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

但它是否还有其他空间停止工作:

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

如果返回:

'12232   '

作为比赛。

3 个答案:

答案 0 :(得分: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://laravel.com/api/5.4/Illuminate/Database/Eloquent/Builder.html#method_chunkById非常适合帮助构建,测试和共享正则表达式。

答案 1 :(得分:2)

您的要求不清楚。 我猜这个要求是:

  • 三位或更多位数字
  • 后跟一个或多个空格
  • 后面跟一个字母只包含一个或多个字母

\ d {3,} \ S * [A-ZA-Z] +

答案 2 :(得分:1)

问题是\D还匹配与\s匹配的所有字符。您需要从\s中减去\D模式。通过将\D转换为等效的否定字符类[^\d]并将\s添加到其中,可以轻松实现:[^\d\s]

使用

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

请参阅Python demo online