Pyparsing在行首匹配文本忽略whitesp

2024-10-06 15:22:04 发布

您现在位置:Python中文网/ 问答频道 /正文

试图匹配这个

create

或者

create

但不是

#  create

这不管用

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

这也不是

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

Tags: createminwhitesuppresslinestartsearchstringcaselessliteral
1条回答
网友
1楼 · 发布于 2024-10-06 15:22:04

Pyparsing的空白跳过会混淆这里的问题,而且LineStart()是一个很难处理的类

核心问题是,每个pyparsing元素都运行一个预解析例程,以跳过空白和任何可忽略的表达式(如注释)。在您的例子中,LineStart的预解析例程跳过了前导空格!所以它在评估“这是一行的开始吗?”不是在第1列,而是在第4列,在“create”中有第一个字母

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

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

将打印:

[['create']]

相关问题 更多 >