匹配多个嵌套乳胶参数的正则表达式

2024-10-02 00:39:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在用Python编写一个代码项目,将LaTeX数学标记翻译成标准的Python命令\frac{a}{b}到{}。在

我用一种我觉得对嵌套方程最友好的方式来处理这个问题:递归。每一个方程都被分解成对象和运算符,并且对象,例如附加语句和乳胶项,都会被重新计算,直到达到最大深度。在

然而,当涉及到使用多个嵌套参数来分解某些特定的LaTeX术语时,我遇到了一些使用regex的障碍,就像我前面提到的那个。在闲逛了很久,在谷歌上搜索了很久之后,我得到了这样一个结论:

http://regex101.com/r/oO5oG9

唯一的问题是,我在尝试在Python中计算完全相同的术语时遇到了这个错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python34\lib\re.py", line 206, in findall
    return _compile(pattern, flags).findall(string)
  File "C:\Python34\lib\re.py", line 288, in _compile
    p = sre_compile.compile(pattern, flags)
  File "C:\Python34\lib\sre_compile.py", line 465, in compile
    p = sre_parse.parse(p, flags)
  File "C:\Python34\lib\sre_parse.py", line 746, in parse
    p = _parse_sub(source, pattern, 0)
  File "C:\Python34\lib\sre_parse.py", line 358, in _parse_sub
    itemsappend(_parse(source, state))
  File "C:\Python34\lib\sre_parse.py", line 694, in _parse
    p = _parse_sub(source, state)
  File "C:\Python34\lib\sre_parse.py", line 358, in _parse_sub
    itemsappend(_parse(source, state))
  File "C:\Python34\lib\sre_parse.py", line 694, in _parse
    p = _parse_sub(source, state)
  File "C:\Python34\lib\sre_parse.py", line 358, in _parse_sub
    itemsappend(_parse(source, state))
  File "C:\Python34\lib\sre_parse.py", line 681, in _parse
    raise error("unexpected end of pattern")
sre_constants.error: unexpected end of pattern

我不太清楚我的正则表达式有什么问题,并且已经改变了一段时间试图让它工作,但没有结果。。。在


Tags: inpysourceparseliblinefilelatex
2条回答

最终可以用^{}来解决它。它可以通过pip获得(参见PyPI)。一个如何使用它的例子是https://stackoverflow.com/a/20846900/562769。在

Pyparsing使用形式语法来解析字符串。它不是regex,但它可能更适合您的问题。在

Python的默认re-module不支持递归调用,比如(?R)或{}(递归整个模式)。但外部regex模块将支持此功能。在

>>> import regex
>>> s = "\\test{5-\\tan{66}} {8+\\frac{\\cos{2}}{1}} {\\acoth{}}"
>>> regex.findall(r'(\{(?:[^{}]|(?0))*\})', s)
['{5-\\tan{66}}', '{8+\\frac{\\cos{2}}{1}}', '{\\acoth{}}']

来源:http://www.regular-expressions.info/recurse.html

相关问题 更多 >

    热门问题