匹配的空格似乎是非贪婪的

时间:2020-10-06 15:01:55

标签: python python-3.6 re

我正在编写一个小的帮助程序脚本来分析C代码,尤其是使用结构。我在检测结构何时用作值(而不是指针)时遇到问题。这意味着我想检测文本struct foo后面是否有任意数量的空格和不是*的字符。

我将问题归结为该MWE:

>>> import re
>>> there = re.compile('struct foo(\\s*)[^*]')
>>> match = there.search('struct foo *bar')

注意。我需要使用双反斜杠,因为我无法在应用程序中使用原始字符串。我实际上需要一个f弦。

我的书中的MWE 不应该匹配。但是,确实如此,如果我看着match.groups(),我会得到

>>> match.groups()
('',)

表示\\s*确实匹配零个空白字符。从文档中,我希望它与字符串中*foo之前的单个空格匹配,因为*量词应贪婪地匹配零个或多个字符。

\\s甚至用[ \t](注意空格)交换 *也不起作用。

为什么\\s*似乎在空格处匹配零个字符?

3 个答案:

答案 0 :(得分:2)

我认为您只想确保最终字符组与空格字符不匹配。所以你想要:

struct foo(\\s*)[^*\\s]

答案 1 :(得分:1)

我将使用以下正则表达式:

(?:struct foo\s*)([^*\s]+)

如果没有提供星号,它将返回空格之后的内容。

示例: struct foo *bar将不返回任何内容。
struct foo bar将返回bar

此处进行测试和解释:https://regex101.com/r/dVeHc3/1

答案 2 :(得分:1)

(\\s*)正确匹配零空格。 [^*]无法与文​​本中的*相匹配,因此它应该与前一个字符相匹配,前一个字符是(\\s*)所要匹配的唯一可用空间。

相关问题