匹配Python正则表达式中的一些组

时间:2012-03-16 14:38:47

标签: python regex

是否有可能构建一个匹配尽可能多的组的正则表达式,当字符串停止匹配时放弃?例如:

import re    
s = 'a b'
m = re.search('(\w) (\w) (\w)')

我希望m.group(1)包含'a',m.group(2)包含'b',m.group(3)包含None。

但是re.search()在这种情况下不包含任何组。

1 个答案:

答案 0 :(得分:3)

该模式正在查找一个单词字符后跟一个空格,后跟一个单词字符后跟一个空格,后跟一个单词字符,但是您的字符串只有一个字母,一个空格和一个字母,所以从不匹配。您需要修改模式以允许任何可选部分:

import re
s = 'a b'
m = re.search('(\w) (\w)( (\w))?', s)

请注意最终空间和(\ w)组周围的parens。他们创建了另一个组,?修饰符使其成为可选组。如果您不希望在匹配对象中显示此额外组,则可以将其设为“非捕获”组:

m = re.search('(\w) (\w)(?: (\w))?', s)

m现在不会包含(可选)最终空格和单词字符的组,但仅适用于匹配的任何单词字符。