使用python正则表达式匹配不带点的单词

时间:2019-04-10 07:24:24

标签: python regex grouping word

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

/begin MEASUREMENT XXX.YYYY "Status ASC" 

/begin MEASUREMENT XXXX "Status ASC" 

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

我尝试了以下表达式,但无法获得预期的结果:

/begin\s+MEASUREMENT (\w+)

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

2 个答案:

答案 0 :(得分:2)

您可能在\w+之后需要一个空格:

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

请参见regex demoRegulex graph

enter image description here

(?!\S)是一个否定的超前行为,如果下一个字符不是非空格,则匹配失败。它的含义与(?=\s|$)相等,它是一个正向前行,需要在当前位置的右边紧跟一个空格或字符串结尾。 (?:\s|$)是后一种正则表达式的一个很繁琐的变体(即,如果匹配,则空格将在整个匹配项中降落),但是由于您之前捕获的是单词,所以这不是问题。

答案 1 :(得分:1)

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

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

Regex demo