python - 使用 PyParsing 的两个标记之间的字符串

标签 python python-3.x string text-parsing pyparsing

我需要使用 PyParsing 获取两个标记之间的字符串。

来自字符串 s = 'qwertyAAA1234ZZZazerty'我想检索 AAA 之间的字符串和ZZZ这是 1234

到目前为止,我可以使用 searchString() 来完成此操作。是否有可能获得与 parseString() 相同的结果?

使用 PyParsing 的 searchString()

import pyparsing as pp

word = pp.Word(pp.alphanums)

s = 'qwertyAAA1234ZZZazerty'
rule = pp.nestedExpr('AAA', 'ZZZ')
for match in rule.searchString(s):
    print(match)

产生:

[['1234']]

使用 PyParsing 的 parseString()

import pyparsing as pp

word = pp.Word(pp.alphanums)

s = 'gfgfdAAA1234ZZZuijjk'
rule = pp.nestedExpr('AAA', 'ZZZ')
print(rule.parseString(s))

产生:

Traceback (most recent call last):
  File "main.py", line 14, in <module>
    print(rule.parseString(s))
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.7/site-packages/pyparsing.py", line 1939, in parseString
    raise exc
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.7/site-packages/pyparsing.py", line 1929, in parseString
    loc, tokens = self._parse(instring, 0)
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.7/site-packages/pyparsing.py", line 1669, in _parseNoCache
    loc, tokens = self.parseImpl(instring, preloc, doActions)
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.7/site-packages/pyparsing.py", line 4430, in parseImpl
    return self.expr._parse(instring, loc, doActions, callPreParse=False)
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.7/site-packages/pyparsing.py", line 1669, in _parseNoCache
    loc, tokens = self.parseImpl(instring, preloc, doActions)
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.7/site-packages/pyparsing.py", line 4430, in parseImpl
    return self.expr._parse(instring, loc, doActions, callPreParse=False)
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.7/site-packages/pyparsing.py", line 1669, in _parseNoCache
    loc, tokens = self.parseImpl(instring, preloc, doActions)
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.7/site-packages/pyparsing.py", line 4020, in parseImpl
    loc, resultlist = self.exprs[0]._parse(instring, loc, doActions, callPreParse=False)
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.7/site-packages/pyparsing.py", line 1673, in _parseNoCache
    loc, tokens = self.parseImpl(instring, preloc, doActions)
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.7/site-packages/pyparsing.py", line 4430, in parseImpl
    return self.expr._parse(instring, loc, doActions, callPreParse=False)
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.7/site-packages/pyparsing.py", line 1673, in _parseNoCache
    loc, tokens = self.parseImpl(instring, preloc, doActions)
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.7/site-packages/pyparsing.py", line 2871, in parseImpl
    raise ParseException(instring, loc, self.errmsg, self)
pyparsing.ParseException: Expected "AAA", found 'g'  (at char 0), (line:1, col:1)

最佳答案

尝试 SkipTo 或其快捷方式...:

print((... + rule).parseString(s).dump())

给予:

['gfgfd', ['1234']]
- _skipped: ['gfgfd']

关于python - 使用 PyParsing 的两个标记之间的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59665572/

相关文章:

python - 如何在解析 html 表时忽略 th 标签?

python-3.x - 如何调整 st.image 显示的图像大小

python - 如何使用 IP Cam 代替 USB Web Cam 检测/识别人脸

JavaScript 将字符串添加到数字

javascript - 'x' * 5 在 Python 中是 'xxxxx' – 我如何在 CoffeeScript/JavaScript 中做到这一点?

python - finder 和 meta hook 有什么区别?

Python子进程,给子进程一个输入

python - 在 Python 中使用 cPickle 导入错误

python - 如何将 boolean 子数组相交以获得 True 值?

c - C中多维数组中的字符串