python中的Regex似乎没有使用某些连字符

2024-10-03 04:29:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用下面的正则表达式解析一些日期。但它似乎只使用了一些连字符。请看下面的链接。它与某些日期不匹配。我添加了那个特殊的连字符,但它只在rgex101.com中有效。不是用Python。你知道吗

((?:(?<= )|^)((?:0?[1-9]|1[0-2])?[/-] ?(?:[12][0-9])?[0-9]{2})\b(?:[\s-]+)[/-]{0,2}\s*\b((?:0?[1-9]|1[0-2]) ?[/-] ?(?:[12][0-9])?[0-9]{2})\b)

https://regex101.com/r/vI6qN1/1


Tags: httpscom链接字符试图用regex101rgex101vi6qn1
1条回答
网友
1楼 · 发布于 2024-10-03 04:29:00

只需添加多行修饰符。你知道吗

>>> re.findall(r'(?m)((?:(?<= )|^)((?:0?[1-9]|1[0-2])?[/-] ?(?:[12][0-9])?[0-9]{2})\b(?:[\s-]+)[/-]{0,2}\s*\b((?:0?[1-9]|1[0-2]) ?[/-] ?(?:[12][0-9])?[0-9]{2})\b)', s)
[('02/2003-01/2005', '02/2003', '01/2005'), ('01/2002-01/2003', '01/2002', '01/2003'), ('01/2005-02/2007', '01/2005', '02/2007'), ('02/2003-01/2005', '02/2003', '01/2005'), ('01/2002-01/2003', '01/2002', '01/2003'), ('03/1999-01/2002', '03/1999', '01/2002')]

每当使用锚点时,最好添加多行修改器。你知道吗

示例:

>>> s = """     01/2013-11/2014
        01/2010-12/2012

        01/2009-01/2010


        03/2007-12/2009


 02/2003-01/2005

01/2002-01/2003


01/2005-02/2007  

 02/2003-01/2005, 

 01/2002-01/2003, 


, 03/1999-01/2002,
"""
>>> re.findall(r'((?:(?<= )|^)((?:0?[1-9]|1[0-2])?[/-] ?(?:[12][0-9])?[0-9]{2})\b(?:[\s-]+)[/-]{0,2}\s*\b((?:0?[1-9]|1[0-2]) ?[/-] ?(?:[12][0-9])?[0-9]{2})\b)', s)
[('02/2003-01/2005', '02/2003', '01/2005'), ('02/2003-01/2005', '02/2003', '01/2005'), ('01/2002-01/2003', '01/2002', '01/2003'), ('03/1999-01/2002', '03/1999', '01/2002')]
>>> re.findall(r'(?m)((?:(?<= )|^)((?:0?[1-9]|1[0-2])?[/-] ?(?:[12][0-9])?[0-9]{2})\b(?:[\s-]+)[/-]{0,2}\s*\b((?:0?[1-9]|1[0-2]) ?[/-] ?(?:[12][0-9])?[0-9]{2})\b)', s)
[('02/2003-01/2005', '02/2003', '01/2005'), ('01/2002-01/2003', '01/2002', '01/2003'), ('01/2005-02/2007', '01/2005', '02/2007'), ('02/2003-01/2005', '02/2003', '01/2005'), ('01/2002-01/2003', '01/2002', '01/2003'), ('03/1999-01/2002', '03/1999', '01/2002')]

查看匹配结果是否存在差异。

相关问题 更多 >