给定一个输入:line = " say hi /* comment"和一个正则表达式:regex = re.compile(r'\s*(?P<command>.*?)/[/*]')result = regex.search(line)print(result.group('command'))这将成功打印say hi。但是,将最后一部分切换到可选组:regex = re.compile(r'\s*(?P<command>.*?)(/[/*])?')现在不打印任何东西。这不是正则表达式根本不匹配,因为result不是None.为什么当正则表达式不是可选的时它可以工作,但当它是可选的时停止工作,我将如何解决它?
3 回答
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
regex.search()
将找到第一个匹配子串。您可以regex.findall()
在这种情况下使用。
regex.search()
文档说:
如果有多个匹配项,则只返回匹配项的第一次出现
因为/[/*]
可选,所以它没有匹配/
字符的约束。所以它甚至可以匹配第一个空格,它可以匹配任何部分。
您可以在regex101 中在线查看此正则表达式。你可以找到它的过程和结果。
添加回答
举报
0/150
提交
取消