说我有以下字符串
>>> mystr = 'A-ABd54-Bf657'
(划线划分的字符组的随机字符串),并希望在不同的组中匹配开头部分和字符串的其余部分。我可以用
>>> re.match('(?P<a>[a-zA-Z0-9]+)-(?P<b>[a-zA-Z0-9-]+)', mystr)
这会产生groupdict()
,如下所示:
{'a': 'A', 'b': 'ABd54-Bf657'}
如何使用相同的正则表达式匹配组b
,但如果存在(它们存在),则分别匹配特定后缀(或一组足够的)?理想情况下是这样的
>>> myregex = <help me here>
>>> re.match(myregex, 'A-ABd54-Bf657').groupdict()
{'a': 'A', 'b': 'ABd54-Bf657', 'test': None}
>>> re.match(myregex, 'A-ABd54-Bf657-blah').groupdict()
{'a': 'A', 'b': 'ABd54-Bf657-blah', 'test': None}
>>> re.match(myregex, 'A-ABd54-Bf657-test').groupdict()
{'a': 'A', 'b': 'ABd54-Bf657', 'test': 'test'}
感谢。
答案 0 :(得分:3)
mystr = 'A-ABd54-Bf657'
re.match('(?P<a>[a-zA-Z0-9]+)-(?P<b>[a-zA-Z0-9-]+?)(?:-(?P<test>test))?$', mystr)
^ ^
第一个指示?
使+
量词非贪婪,因此它消耗的可能性最小。
第二个指示?
使该组可选。
$
是必要的,否则非贪婪加选项将不会匹配。