如何在正则表达式组中返回 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 中的正则表达式组:如何从正则表达式组中捕获与字符串中出现的未知数量/多个/变量匹配的元素到数组中?

如何从python中的正则表达式匹配中返回一个字符串? [复制]

如何从正则表达式捕获组中修剪空白?