是否有可能构建一个匹配尽可能多的组的正则表达式,当字符串停止匹配时放弃?例如:
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()在这种情况下不包含任何组。
答案 0 :(得分:3)
该模式正在查找一个单词字符后跟一个空格,后跟一个单词字符后跟一个空格,后跟一个单词字符,但是您的字符串只有一个字母,一个空格和一个字母,所以从不匹配。您需要修改模式以允许任何可选部分:
import re
s = 'a b'
m = re.search('(\w) (\w)( (\w))?', s)
请注意最终空间和(\ w)组周围的parens。他们创建了另一个组,?
修饰符使其成为可选组。如果您不希望在匹配对象中显示此额外组,则可以将其设为“非捕获”组:
m = re.search('(\w) (\w)(?: (\w))?', s)
m
现在不会包含(可选)最终空格和单词字符的组,但仅适用于匹配的任何单词字符。