我正在尝试捕获可以在这样的字符串中的日期
' 2022年1月30日,4月6日和10月12日'
我使用python regex模块(它与re相同,但有'重叠'选项)。我需要得到这个列表的最终结果
(2022年1月30日,2022年4月6日,"2022年10月12日")
到目前为止,这个表达式
regex.findall(r'(?:dd | d )(?:jan|feb|mar|ap|may|jun|jul|aug|sep|oct|nov|dec)(?:.*)20(?:dd)', d, overlapped=True)
I am getting
[' 2022年1月30日和4月6日和10月12日',' 2022年4月6日和10月12日',' 2022年10月12日']
提前感谢。
您可以使用一个列表推导式和两个捕获组:
b(d+ (?:jan|feb|mar|ap|may|jun|jul|aug|sep|oct|nov|dec))(?=.*b(20dd))b
查看regex演示和Python演示。
import re
pattern = r"b(d+ (?:jan|feb|mar|ap|may|jun|jul|aug|sep|oct|nov|dec))(?=.*b(20dd))b"
s = r"30 jan and 6 apr and 12 oct 2022"
res = [' '.join(s) for s in re.findall(pattern, s)]
print(res)
输出['30 jan 2022', '6 ap 2022', '12 oct 2022']
注意,(?:.*)
和(?:dd)
不需要非捕获组,因为组本身在模式中没有任何用途。