【问题标题】:searching for doubles with regular expressions [duplicate]用正则表达式搜索双打[重复]
【发布时间】:2016-04-21 14:31:51
【问题描述】:

是否有一个正则表达式可以匹配浮点数,但如果它是 15.01.2016 等结构的一部分则不匹配?

如果s 成功,re.match(rex, s) 应该成功

1.0A
1.B
.1

slike 不成功

1.0.0
1.0.1
20.20.20.30
12345.657.345

编辑: 关键部分是约束的组合:"[0-9]*\.[0-9]*" 而不是 "[0-9]+\.[0-9]+(\.[0-9]+)+" 的一部分

【问题讨论】:

  • 我可以匹配双打和类似 xxx.xxx.xxx 两个约束的组合是问题
  • 你能显示你的正则表达式吗?
  • 回答您实际提出的问题:是的,有。但我赞同安东的评论。您可能希望参考帮助文件,尤其是how to ask a good question。此外,请查看文档中的前瞻断言。
  • 你可以用\d代替[0-9]
  • 这里有人只是重复疯狂.. 这不是正常的浮点匹配。

标签: python regex


【解决方案1】:

您可以根据 python 中的环视来使用此正则表达式:

(?<![\d.])(?:\d*\.\d+|\d+\.\d*)(?![\d.])

RegEx Demo

  • (?![\d.]) 是前瞻断言,如果下一个字符是点或数字,则匹配失败
  • (?&lt;![\d.]) 是后向断言,如果前一个字符是点或数字,则匹配失败

【讨论】:

    【解决方案2】:

    下面的解决方案也使用前瞻和后瞻作为 anubhava 提到的。此外,它还处理负数、十的幂(也是负数)和整数(没有 .):

    (?<![\d.])-?(?:\d+\.?\d*|\d*\.\d+)([eE]-?\d+)?(?![.\d])
    

    如果您在后面的 (?&lt;![\d.]) 中添加一些额外的字符,您可以避免在随机字符串或单词末尾匹配(例如,如果您不想匹配 "python3")。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多