【问题标题】:Matching word without dot with Python regex使用 Python 正则表达式匹配不带点的单词
【发布时间】:2019-04-10 07:24:24
【问题描述】:

我在一个文件中有一行可以有以下两种格式:

/begin MEASUREMENT XXX.YYYY "Status ASC" 

/begin MEASUREMENT XXXX "Status ASC" 

我想写一个不匹配第一种格式但可以匹配第二种格式并且可以从第二种格式给我XXXX的表达式。

我尝试了下面的表达式,但没有得到想要的结果:

/begin\s+MEASUREMENT (\w+)

我可以对我的正则表达式进行哪些更改?

【问题讨论】:

    标签: python regex grouping word


    【解决方案1】:

    \w+ 后面可能需要一个空格:

    /begin\s+MEASUREMENT (\w+)(?!\S)
    /begin\s+MEASUREMENT (\w+)(?=\s|$)
    /begin\s+MEASUREMENT (\w+)(?:\s|$)
    

    查看regex demoRegulex graph

    (?!\S) 是一个否定的前瞻,如果下一个字符不是非空格,则匹配失败。它的含义与(?=\s|$) 相同,这是一个正向前瞻,需要紧挨当前位置右侧的空格或字符串结尾。 (?:\s|$) 是后一个正则表达式的一个消耗性变体(即,如果匹配,空格将出现在整个匹配项中),但由于您之前捕获了这个词,所以这应该不是问题。

    【讨论】:

    • 感谢您的快速回复!你能解释一下 (?!\S) 、 (?=\s|$) 和 (?:\s|$) 的含义吗?
    • 天哪,我不知道 Regulex,这是一个不错的工具!感谢分享!
    【解决方案2】:

    您可以使用单词边界\b 和否定前瞻(?! 来断言右边的不是点:

    /begin\s+MEASUREMENT (\w+)\b(?!\.)
    

    Regex demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-07
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      相关资源
      最近更新 更多