如何在python中完全或部分匹配正则表达式
这是一个基本的问题,但我已经搜索了一些,仍然有疑问 让我们以下面的正则表达式为例:如何在python中完全或部分匹配正则表达式,python,regex,Python,Regex,这是一个基本的问题,但我已经搜索了一些,仍然有疑问 让我们以下面的正则表达式为例: regex_example = re.compile('\d{10}\s\d-\d{3}-\d{3}-\d{4}') 现在让我们假设有一个字符串可能包含与该正则表达式的全长匹配的子字符串,例如“123456780 1-123-456-7890”,或者它可能只包含与正则表达式的第一部分匹配的子字符串,例如“123456780 1-123” 我想修改正则表达式(或使用另一种解决方案),允许我匹配任何具有14个或更多
regex_example = re.compile('\d{10}\s\d-\d{3}-\d{3}-\d{4}')
现在让我们假设有一个字符串可能包含与该正则表达式的全长匹配的子字符串,例如“123456780 1-123-456-7890”,或者它可能只包含与正则表达式的第一部分匹配的子字符串,例如“123456780 1-123”
我想修改正则表达式(或使用另一种解决方案),允许我匹配任何具有14个或更多字符的子字符串,并部分或全部匹配正则表达式。所以我的代码会发现:
“1234567890 1-1”(有14个字符,与正则表达式的开头匹配)
或
'1234567890 1-13'
或
“1234567890 1-134”
以此类推,直到正则表达式的完整长度。您可以选择前14个字符后的部分:
regex_example = re.compile(
'(\d{10}\s\d-\d(?:\d{0,2}(?:(?:-\d{0,3})?(?:-\d{0,4})?)?)?)')
抱歉,我不明白。当我查看右侧的匹配窗口(“23-456-7890”)时,您的链接显示只有一个匹配。这也是我在测试中得到的。当我运行“regex_example.findall(test_str)”时,测试字符串“bla 123456780 1-123-456-7890 bla”的输出是['23-456-7890']。在那种情况下,我会期待[123456780 1-123-456-7890'](一场全场比赛)。确实如此,但这仍然不是我需要的。将此设置为可选组就是将匹配设置为完全匹配或完全不包含可选组的匹配。阅读我原始问题的最后一部分。不过还是要谢谢你……没错。捕获14个字符是部分的,捕获15个字符是部分的,依此类推,直到我们得到完全匹配。我提供了一些例子,让它更清楚,但如果你想建议我如何改进最初的问题,我愿意接受。是的,它能工作。正如我所说,如果你想具体说明如何改进,我很乐意重新表述我的问题。