当前位置: 首页 > 知识库问答 >
问题:

python中的正则表达式似乎没有使用连字符

高茂
2023-03-14

我试图用下面的正则表达式解析一些日期。但它似乎只使用了一些连字符。请看下面的链接。它与某些日期不匹配。我添加了那个特殊的连字符,但它只在RGE0101中有效。通用域名格式。不是用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

共有1个答案

奚飞星
2023-03-14

您只需要添加多行修饰符。

>>> 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')]

查看匹配结果中存在差异

 类似资料:
  • 1. 正则表达式 1.1 简介 正则表达式 (regular expression) 描述了一种字符串匹配的模式 (pattern),例如: 模式 ab+c 可以匹配 abc、abbc、abbbc 代表前面的字符出现 1 次或者多次 模式 ab*c 可以匹配 ac、abc、abbc ? 代表前面的字符出现 0 次或者多次 模式 ab?c 可以匹配 ac、abc ? 代表前面的字符出现 0 次或者

  • 序:世界上信息非常多,而我们关注的信息有限。假如我们希望只提取出关注的数据,此时可以通过一些表达式进行提取,正则表达式就是其中一种进行数据筛选的表达式。 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。 正则表达式通常被用来匹配、检索、替换和分割那些符合某个模式(规则)的文本。 Python 自1.5版本起

  • 我对python还很陌生,我正在尝试创建21点。然而,当我试图打印出玩家的手牌时,我遇到了一些困难。 这是我的击球(抽牌)代码: 这是我打印卡片的代码: 我的代码所做的第一件事是为庄家和玩家抽两张牌,这运行得很好。然而,当玩家抽到一张牌后,它就会变得有点摇摆不定。输出如下所示: 当我抽到一张新牌时,这张牌不变,它保持我抽到的最后一张牌。然后,当我打印我的甲板,它打印我的旧甲板和我的新甲板。但是,分

  • 行动时刻 - 使用正则表达式 Unlang允许在条件检查中进行正则表达式计算。这些通常是Posix正则表达式。运算符=〜和!〜与正则表达式相关联。为了简单的概念证明,我们将修改上一个练习: 1.编辑FreeRADIUS配置目录下的sites-available / default虚拟服务器,并在该部分顶部的post-auth部分中添加以下内容: if(request:Framed-Protocol

  • 问题内容: 我正在尝试验证一个没有多余字符的(美国)电话号码。因此格式为1-555-555-5555,没有破折号,空格等,并且1是可选的。但是,我的正则表达式仅会排除前导数字为1的数字,并说没有该数字的数字将无效。这是我在使用的地方,我哪里出错了? 问题答案: 用: ?表示“可选”。

  • 我正在创建一个单词替换脚本。我遇到了一个路障,忽略引号之间的字符串,并且在这里找不到一个不涉及正则表达式的体面解决方案。 我有一个工作片段,它循环遍历字符串中的每个字符,并计算出最近的报价是开始报价还是结束报价(无论是单引号还是双引号),并忽略转义报价。问题是,为了提供100%准确的体验,它必须在每次字符串更改时运行(由于它的工作方式,它可以在单个函数中更改60K次),并且由于字符串长度的可能性,