2024-10-06 15:22:04 发布
网友
试图匹配这个
create
或者
但不是
# create
这不管用
(LineStart() + CaselessLiteral('create')).searchString(''' create ''')
这也不是
(LineStart() + White(min=0).suppress() + CaselessLiteral('create')).searchString(''' create ''')
Pyparsing的空白跳过会混淆这里的问题,而且LineStart()是一个很难处理的类
LineStart()
核心问题是,每个pyparsing元素都运行一个预解析例程,以跳过空白和任何可忽略的表达式(如注释)。在您的例子中,LineStart的预解析例程跳过了前导空格!所以它在评估“这是一行的开始吗?”不是在第1列,而是在第4列,在“create”中有第一个字母
LineStart
您可以通过调用leaveWhitespace来抑制LineStart元素上的空白跳过-也就是说,在pre-parse函数期间不要跳过空白。这看起来像:
leaveWhitespace
print((LineStart().leaveWhitespace() + CaselessLiteral('create')).searchString('''\ create '''))
将打印:
[['create']]
Pyparsing的空白跳过会混淆这里的问题,而且
LineStart()
是一个很难处理的类核心问题是,每个pyparsing元素都运行一个预解析例程,以跳过空白和任何可忽略的表达式(如注释)。在您的例子中,
LineStart
的预解析例程跳过了前导空格!所以它在评估“这是一行的开始吗?”不是在第1列,而是在第4列,在“create”中有第一个字母您可以通过调用
leaveWhitespace
来抑制LineStart元素上的空白跳过-也就是说,在pre-parse函数期间不要跳过空白。这看起来像:将打印:
相关问题 更多 >
编程相关推荐