Python Pyparsing提取两个不带分隔符的值
我正在努力通过这次考试。我不知道为什么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
#!/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)。