我有一串" 动物猫狗"我试图从中提取动物。
关注this example,我尝试使用re.search(以及稍后的re.match),但是这并没有产生我预期的结果。 if语句将通过但groups()将为空。
我的代码:
string = "fox cat dog"
regex = "\S+ cat dog\s*"
m = re.search(regex, string)
if m:
temp = m.group(1)
我尝试打印m和m.groups()并且它们具有以下值:
m: <_sre.SRE_Match object at 0x000000002009A920>
m.groups(): ()
我通过使用子串和.find()找到了解决问题的方法,但我很好奇我的原始代码出了什么问题。
任何帮助将不胜感激。谢谢!
答案 0 :(得分:4)
您只需要在所需的组中添加一个括号。像这样:
string = "fox cat dog"
regex = "(\S+) cat dog\s*"
# ~~~~~~Note the parenthesis there
m = re.search(regex, string)
if m:
temp = m.group(1)
您可以查看documentation以获取更多信息:
(...)匹配括号内的正则表达式, 并指示组的开始和结束;一组的内容 可以在执行匹配后检索,并且可以匹配 稍后在带有\ number特殊序列的字符串中进行描述 下面。要匹配文字'('或')',请使用
\(
或\)
,或将其括起来 在一个字符类中:[(] [)]。