如何忽略python正则表达式组匹配中的字符串?

时间:2016-05-18 15:00:08

标签: python regex

说我有以下字符串

>>> 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'}

感谢。

1 个答案:

答案 0 :(得分:3)

mystr = 'A-ABd54-Bf657'
re.match('(?P<a>[a-zA-Z0-9]+)-(?P<b>[a-zA-Z0-9-]+?)(?:-(?P<test>test))?$', mystr)
                                                 ^                    ^

第一个指示?使+量词非贪婪,因此它消耗的可能性最小。

第二个指示?使该组可选。

$是必要的,否则非贪婪加选项将不会匹配。