使用pyparsing
我需要为
a + names + c
与
a = pp.OneOrMore(pp.Word(pp.alphas))
c = pp.OneOrMore(pp.Word(pp.nums))
和names
匹配字符串列表names_list
中的众多条目之一。
这两个并发症是:
names_list
中的条目可以包含空格。names_list
相当大(~20000条目)我试过
names_kw_list = [pp.Keyword(name, caseless=True) for name in names_list ]
names = pp.Or(names_kw_list)
这对于带空格的条目不起作用我担心这不是一种非常有效的写入方式。
是否有任何想法让这个用于条目中的空格并且可能使其表现更快?
答案 0 :(得分:1)
部分答案:
可以使用正确的stopOn
函数解决空格问题:
def last_occurrence_of(expr):
return expr + ~pp.FollowedBy(pp.SkipTo(expr))
names_kw_list = [pp.Keyword(word, caseless=True)
for word in names_list ]
names = pp.Or(names_kw_list)("names")
a = pp.OneOrMore(pp.Word(pp.alphas), stopOn=last_occurrence_of(names))("A")
c = pp.OneOrMore(pp.Word(pp.nums))("C")
expr = a + names + c
这指示a
不要吃names
的字符串。
然而,性能会下降,因为现在在stopOn
表达式中使用了很长的名称列表。