regex匹配而不捕获字符串的某些部分



我正在尝试捕获可以在这样的字符串中的日期

' 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)不需要非捕获组,因为组本身在模式中没有任何用途。

相关内容

  • 没有找到相关文章