如何在正则表达式组中返回 None? [复制]
Posted
技术标签:
【中文标题】如何在正则表达式组中返回 None? [复制]【英文标题】:How to return None in regex groups? [duplicate] 【发布时间】:2019-06-16 14:41:42 【问题描述】:如果在正则表达式中找不到特定字符,我如何在 groups() 中打印 None?第一个捕获组应该返回 None 或“S”,但我在 print(t.groups()) 中返回 None 时遇到了麻烦。
rx = r'^([S])([Nn]+)([m])([f]|[d])$'
t = re.match( rx , 'NNmf' )
print( t.groups() )
这是我迄今为止尝试过的,也使用 '?:' 表示未编号的捕获组,希望它会返回 'None' 但没有运气。
(None , ' NN ' , ' m ' , ' f ' )
结果应如上所示,目前我收到“AttributeError: 'NoneType' object has no attribute 'groups'”。
任何建议将不胜感激!
【问题讨论】:
这样你的正则表达式将不匹配你的字符串。您可能希望使用?
将第一组设为可选。
【参考方案1】:
“S”必须被标记为可选字符。由于您的搜索在开始时锚定,因此您应该改用re.match
:
re.match('(S)?([Nn]+)(m)(f|d)$', 'NNmf').groups()
# (None, 'NN', 'm', 'f')
【讨论】:
对不起,这是我的误解,一切正常。感谢您的帮助! 答案的意思是,如果您使用match
而不是search
,则隐含^
,因此您无需明确指定它。如果您出于某种原因希望您的正则表达式更长,您仍然可以将它放在那里。以上是关于如何在正则表达式组中返回 None? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在javascript中有条件地返回正则表达式匹配? [复制]
Perl 中的正则表达式组:如何从正则表达式组中捕获与字符串中出现的未知数量/多个/变量匹配的元素到数组中?