Python 3中正则表达式匹配数的奇怪行为

时间:2014-08-06 07:59:00

标签: regex python-3.x numbers

任何人都可以在以下正则表达式中找到错误:

regex =([。0-9] + [/ -_ \“:·'ー' - ` - '。, - \ 0-9] *)

我的目的是匹配任何类型的“数字”字符串,但如果数字后跟例如我只想写一封信。

当我使用以下句子时:
s1 = Bla bla 805P bla 1080P; bla bla
s2 = Bla bla 5600p bla 5400p
它会在805P中找到1080Ps1,在5600中找到5400s2
您可以使用http://regexpal.com

进行检查

我也在Regex Buddy中使用了这个正则表达式,它给了我一个对字母没有任何说明的描述 如果第二组字符中没有包含字母,有没有人知道为什么我会在P中抓住P;s1

2 个答案:

答案 0 :(得分:2)

您使用0转义-而非-\0。而且,这非常复杂;你需要的只是

pattern = "([.0-9]+[^A-Za-z]*)"

即。 “一个或多个数字或句点后跟尽可能多的非字母字符”。如果需要,您可以向第二个块添加更多要忽略的字符。见demo

答案 1 :(得分:2)

正则表达式的一部分是[... ,-\\ ...],其中包含逗号和反斜杠之间的任何字符,其中包括以下字符:

,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\

顺便提一下,这包括P

要匹配字符类中的文字减号,它必须是first,last或escapeped。 E.g。

[- ... ,\\ ... ]
[ ... ,\\ ... -]
[ ... ,\-\\ ... ]

都是写出你想要的有效方法。