我需要一个捕获 2 个组的正则表达式:电影和年份。可选地,它们之间可以有一个 'from ' 字符串。
我的预期结果是:
first_query="matrix 2013" => ('matrix', '2013')
second_query="matrix from 2013" => ('matrix', '2013')
third_query="matrix" => ('matrix', None)
我在 https://regex101.com/ 上做了 2 次模拟对于 python3: 我- r"(.+)(?:from ){0,1}([1-2]\d{3})" 不匹配 first_query 和 third_query,也没有在第一组中省略“from”,这是我想避免的。
II- r"(.+)(?:from ){1}([1-2]\d{3})" 适用于 second_query,但不匹配 first_query 和 third_query。
是否可以匹配所有三个字符串,从第一组中省略 'from ' 字符串?
提前致谢。
请您参考如下方法:
你可以使用
^(.+?)(?:\s+(?:from\s+)?([12]\d{3}))?$
参见 regex demo
详情
^- 字符串的开始(.+?)- 第 1 组:除换行字符外的任何 1+ 个字符,尽可能少(?:\s+(?:from\s+)?([12]\d{3}))?- 可选的非捕获组匹配 1 次或 0 次出现:\s+- 1+ 个空格(?:from\s+)?-from子字符串的可选序列,后跟 1+ 个空格([12]\d{3})- 第 2 组:1或2后跟 3 位数字
$- 字符串结尾。
