Python正则表达式查找数字和点号

11

我正在使用re.findall()从HTML文件中提取一些版本号:

>>> import re
>>> text = "<table><td><a href=\"url\">Test0.2.1.zip</a></td><td>Test0.2.1</td></table> Test0.2.1"
>>> re.findall("Test([\.0-9]*)", text)
['0.2.1.', '0.2.1', '0.2.1']

但我只想得到那些没有以句点结尾的。

文件名可能不总是以 .zip 结尾,所以我不能只在正则表达式中添加 .zip。

最终想得到的结果是:

['0.2.1', '0.2.1']

有人能建议一个更好的正则表达式来使用吗? :)

1个回答

27
re.findall(r"Test([0-9.]*[0-9]+)", text)

或者,稍微简短一些:

re.findall(r"Test([\d.]*\d+)", text)

顺便说一下 - 在字符类中你不需要转义点号。在[]内部, .没有特殊含义,它只匹配字面的点号。转义点号没有任何效果。


如果数字可以大于9,那么应该使用\d+。 - unbeknown
1
应该是r"Test([\d.]*\d+)"——在字符串中\d没有任何意义,因此它有效,但通常最好不要依赖它。如果您想更严格一些(例如拒绝1..2),则可以使用r"Test(\d*(?:.\d+))"。 - ianb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接