【问题标题】:Python regex findall numbers and dotsPython正则表达式查找所有数字和点
【发布时间】:2010-09-26 06:27:51
【问题描述】:

我正在使用 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']

谁能推荐一个更好的正则表达式来使用? :)

【问题讨论】:

    标签: python regex findall


    【解决方案1】:
    re.findall(r"Test([0-9.]*[0-9]+)", text)
    

    或者,更短一点:

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

    顺便说一句 - 您不需要在字符类中转义点。在[] 内部,. 没有特殊含义,它只是匹配文字点。逃避它没有效果。

    【讨论】:

    • 如果数字可以大于9,应该是\d+
    • 应该是 r"Test([\d.]*\d+)" -- \d 在字符串中没有任何意义,所以它可以工作,但通常最好不要依赖那。 r"Test(\d*(?:\.\d+))" 如果你想稍微严格一些(例如拒绝 1..2),你可以做 r"Test(\d*(?:\.\d+))"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    相关资源
    最近更新 更多