【问题标题】:Python regex search function wierd behavior [duplicate]Python正则表达式搜索功能奇怪的行为[重复]
【发布时间】:2016-04-01 08:58:30
【问题描述】:

我正在编写代码来检索文本文件中的 IP 地址,但我对正则表达式部分有疑问:

import re

print re.search(r"[0-255].[0-255].[0-255].[0-255]","5.39.0.0")

这将返回None,但它应该返回<_sre.SRE_Match object at 0x0000000001D7C510>(因为"5.39.0.0" 与表达式匹配)。如果我将 39 替换为 0 就可以了。

【问题讨论】:

  • 不,不应该。 [0-255] 匹配 0125,出现一次。
  • 添加到这个,'。'匹配除换行符以外的所有内容,因此该表达式也将匹配 u'2a5\u00F5045'
  • @Kendas 好的,你怎么只要求一个点
  • 来点research怎么样?

标签: python regex


【解决方案1】:

您的正则表达式由于多种原因无法发挥作用(请参阅 cmets)。

圆点表示可以使用任何你想要的字符\.

试试这个正则表达式:

(?:(?:[01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])

作为参考检查这个网站,有类似的例子: Regular Experession Examples

P.S.:网上有几个正则表达式的测试站点,你应该使用它们,例如:Regex101

编辑:最后一组中的条件选项必须反转,如果不是 2** 的匹配将通过第一个条件与前两个字符匹配,例如:255.255.255.250 将匹配为 255.255.255.25(最后一个数字丢失)。在单个组(用于替代或计数)没有意义或不需要的情况下,也建议在正则表达式中使用非捕获组。

【讨论】:

    【解决方案2】:

    好的,我忘记了一些重要的东西,这是解决方案:

    [0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}
    

    【讨论】:

    • 请注意,这将匹配 999.999.999.999 之类的内容。
    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    相关资源
    最近更新 更多