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']]
正在尝试匹配这个
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']]