我使用的是python3.7和pyparsing==2.4.2
我基本上想以一种有效的方式分析以下内容:
import pyparsing as pp
content = pp.OneOrMore(
pp.Word(pp.pyparsing_unicode.printables, excludeChars="#<>;")
)
以上速度大约是
content = pp.OneOrMore(
pp.Word(pp.printables, excludeChars="#<>;")
)
再次使用pp.CharsNotIn
相当快,但其行为方式与pp.Word
有些不同。如果我在不匹配的字符中包含空格(这样我就得到了单独的标记),它就不能与pp.OneOrMore
很好地结合。你知道吗
content = pp.OneOrMore(
pp.CharsNotIn(" \t\r\n#<>;")
)
例如,在解析时导致ParseException
parser.content.parseString("foo bar", parseAll=True)
pyparsing.ParseException: Expected end of text, found 'b' (at char 4), (line:1, col:5)
对于这种情况有什么好的策略吗?你知道吗
我想确保性能测试将创建表达式的时间和使用表达式进行解析的时间分开。(我还试用了另外两种Regex格式,如下所述):
您可以看到两者都正确地解析了测试字符串,但是Regex大约快了40倍。我还使用从
"[" + pp.pyparsing_unicode.printables + "]+"
这个结果和单词表达式差不多。你知道吗最后,我使用通过将
pp.pyparsing_unicode.printables
转换为实际re范围而创建的正则表达式进行了测试,而不是仅使用一个 大百万字符重范围(比如把alphanums的正则表达式从 “[abcdefghijklmnopqrstuvxyzabefghijklmnopqrstuvxyzo123456789]+” 至“[A-Za-z0-9]+”)。你知道吗这最终与否定范围匹配相当,使我相信将字符列表转换为重范围 对于一般的单词解析来说是一个潜在的加速(在解析器创建时有一个小的惩罚)。你知道吗
相关问题 更多 >
编程相关推荐