Pyparsing - 在忽略空格的行开头匹配文字

Pyparsing -Match literal at start of line ignoring whitespace

正在尝试匹配这个

create

create

但不是

#  create

这行不通。

(LineStart() + CaselessLiteral('create')).searchString('''
   create
''')

这也不行

(LineStart() + White(min=0).suppress() + CaselessLiteral('create')).searchString('''
   create
''')

Pyparsing 的空格跳过混淆了这里的问题,LineStart() 是一个挑剔的 class 无论如何都可以使用。

核心问题是每个 pyparsing 元素都运行一个预解析例程,以跳过空格和任何可忽略的表达式(如注释)。在您的情况下,LineStart 的预解析例程跳过了前导空格!因此,它不是在第 1 列评估 "is this the start of a line?",而是在第 4 列评估 "create".

中的第一个字母

您可以通过调用 leaveWhitespace 来抑制您的 LineStart 元素上的空格跳过 - 也就是说,在预解析函数期间不要跳过空格。这看起来像:

print((LineStart().leaveWhitespace() + CaselessLiteral('create')).searchString('''\
   create
'''))

这将打印:

[['create']]