Python Pyparsing提取两个不带分隔符的值

Python Pyparsing提取两个不带分隔符的值,python,pyparsing,Python,Pyparsing,我正在努力通过这次考试。我不知道为什么pyparsing没有像预期的那样提取值 #!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import ( absolute_import, division, print_function, unicode_literals ) import pytest from pyparsing import Word, nums def parse(t

我正在努力通过这次考试。我不知道为什么pyparsing没有像预期的那样提取值

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import (
    absolute_import,
    division,
    print_function,
    unicode_literals
)

import pytest
from pyparsing import Word, nums


def parse(text):
    value = Word(nums, max=2)

    fragment_a = (
        value
    ).setResultsName('alpha').setParseAction(lambda string,location,tokens: [int(tokens[0])])

    fragment_b = (
        value
    ).setResultsName('beta').setParseAction(lambda string,location,tokens: [int(tokens[0])])

    fragments = (
        fragment_a + fragment_b
    )

    for found in fragments.searchString(text):
        yield tuple(found)


@pytest.mark.unit
@pytest.mark.parametrize("input_text, expected_output", [
    ('1234', (12, 34)),
    ('0123', (1, 23)),
    ('0023', (0, 23)),
    ('0000', (0, 0)),
    ('506', (5, 6)),
])
def test_parse(input_text, expected_output):
    tested = False
    for output in parse(input_text):
        tested = True
        assert output == expected_output
    assert tested

这些是我的通行证
value=Word(nums,max=2)
应该是
value=Word(nums,exact=2)
max=2
失败,因为存在两位以上的数字。尝试
fragments.runTests('1234')
以获得更好的输出。@PaulMcGuire因此,如果我将其设置为exact=2,则最后一个测试用例“506”将无法通过。我已经添加了两行额外的代码来验证是否返回了输出506'当前不匹配。
value1=Word(nums,exact=1);值2=字(nums,精确值=2);fragments=(value2*2)|(value1+value2)
-在测试中,您将3位字段拆分为“5”和“06”-是否有将其拆分为“50”和“6”的情况?您是否支持像“01”这样的两位数字段?这应该是“0”和“1”,还是“01”和“1”?“0”作为分隔符是否有效?我并不是故意刁难你,但你在这里引入了一些模棱两可的东西,需要加以澄清。如果规则过于复杂,您最好将整个数字字段作为一个字段进行解析,然后使用解析操作将其分解。谢谢您的提问。如你所说,我曾考虑过做后者。。。3号序列应该总是像从右边填充一样进行解析。。。所以506总是'5'和'06'->(5,6)。