gpt4 book ai didi

python - Pyparsing:检测具有特定结尾的标记

转载 作者:行者123 更新时间:2023-11-28 17:47:17 25 4
gpt4 key购买 nike

我想知道我在这里做错了什么。也许有人可以给我提示这个问题。我想使用以字符串 _Init 终止的 pyparsing 检测某些标记。

例如,我将以下行存储在 text

one
two_Init
threeInit
four_foo_Init
five_foo_bar_Init

我想提取以下几行:

two_Init
four_foo_Init
five_foo_bar_Init

目前,我已将问题简化为以下几行:

    import pyparsing as pp

ident = pp.Word(pp.alphas, pp.alphanums + "_")
ident_init = pp.Combine(ident + pp.Literal("_Init"))

for detected, s, e in ident_init.scanString(text):
print detected

使用此代码没有结果。如果我删除了 Word 语句中的 "_",那么我至少可以检测到末尾有 _Init 的行。但结果并不完整:

['two_Init']
['foo_Init']
['bar_Init']

有人知道我在这里做的完全错了吗?

最佳答案

问题是你想接受 '_' 只要它不是终止 '_Init 中的 '_' '.这里有两个 pyparsing 解决方案,一个是更“纯”的 pyparsing,另一个只是说到底并使用嵌入式正则表达式。

samples = """\
one
two_Init
threeInit
four_foo_Init
six_seven_Init_eight_Init
five_foo_bar_Init"""


from pyparsing import Combine, OneOrMore, Word, alphas, alphanums, Literal, WordEnd, Regex

# implement explicit lookahead: allow '_' as part of your Combined OneOrMore,
# as long as it is not followed by "Init" and the end of the word
option1 = Combine(OneOrMore(Word(alphas,alphanums) |
'_' + ~(Literal("Init")+WordEnd()))
+ "_Init")

# sometimes regular expressions and their implicit lookahead/backtracking do
# make things easier
option2 = Regex(r'\b[a-zA-Z_][a-zA-Z0-9_]*_Init\b')

for expr in (option1, option2):
print '\n'.join(t[0] for t in expr.searchString(samples))
print

两个选项打印:

two_Init
four_foo_Init
six_seven_Init_eight_Init
five_foo_bar_Init

关于python - Pyparsing:检测具有特定结尾的标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16277839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com