Python 试图匹配re

Python 试图匹配re,python,regex,Python,Regex,我试图用正则表达式打印这个 trying = 'Mar 20th, 2009' r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (?:[0-9]{2}|[0-9])[rdth]{2}, \d{4}' 我无法在20号之后打印逗号, 这是我尝试过的 print (re.findall(r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*[\s]\d{2}[th , ]+'

我试图用正则表达式打印这个

trying = 'Mar 20th, 2009'
r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (?:[0-9]{2}|[0-9])[rdth]{2}, \d{4}'
我无法在20号之后打印逗号, 这是我尝试过的

print (re.findall(r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*[\s]\d{2}[th , ]+', trying))
print (re.findall(r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*[\s]\d{2}[a-z,]+', trying))
print (re.findall(r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*[\s]\d{2}[a-z]+[,]', trying))
所需的输出应该是输入字符串。
我做错了什么?

试试这个正则表达式

trying = 'Mar 20th, 2009'
r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (?:[0-9]{2}|[0-9])[rdth]{2}, \d{4}'
与此相匹配

>>> x = re.findall(r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (?:[0-9]{2}|[0-9])[rdth]{2}, \d{4}', trying)
>>> x
['Mar 20th, 2009']
>>> tryig = 'Jun 3rd, 2017'
>>> x = re.findall(r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (?:[0-9]{2}|[0-9])[rdth]{2}, \d{4}', tryig)
>>> x
['Jun 3rd, 2017']
根据评论更新:

>>> regex = r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{1,2}[rdth]{2}, \d{4}'
>>> x = re.findall(regex, trying)
>>> x
['Mar 20th, 2009']

试试这个正则表达式

trying = 'Mar 20th, 2009'
r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (?:[0-9]{2}|[0-9])[rdth]{2}, \d{4}'
与此相匹配

>>> x = re.findall(r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (?:[0-9]{2}|[0-9])[rdth]{2}, \d{4}', trying)
>>> x
['Mar 20th, 2009']
>>> tryig = 'Jun 3rd, 2017'
>>> x = re.findall(r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (?:[0-9]{2}|[0-9])[rdth]{2}, \d{4}', tryig)
>>> x
['Jun 3rd, 2017']
根据评论更新:

>>> regex = r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{1,2}[rdth]{2}, \d{4}'
>>> x = re.findall(regex, trying)
>>> x
['Mar 20th, 2009']
这会奏效的

>>> print (re.findall(r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[\s]\d{1,2}th[,][\s]\d{4}',trying))
=> ['Mar 20th, 2009']`
现在让我们看看为什么你的试验没有给你预期的结果

  • print(关于findall(r'(?:一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月)[a-z]*[\s]\d{2}[th,]+,trying))
    ->这在
    th之后有空格,因此它将不匹配

  • print(re.findall(r'(?:一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月)[a-z]*[\s]\d{2}[a-z,]+',try])
    ->通过给出
    +/code>,您可以在搜索结束时找到一个或多个
    th、
    ,因此它只匹配到
    th、

  • print(关于findall(r'(?:一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月)[a-z]*[\s]\d{2}[a-z]+[,],尝试])
    ->类似地,您对子字符串的搜索以
    结束,所以直到
    th,

  • 这会奏效的

    >>> print (re.findall(r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[\s]\d{1,2}th[,][\s]\d{4}',trying))
    => ['Mar 20th, 2009']`
    
    现在让我们看看为什么你的试验没有给你预期的结果

  • print(关于findall(r'(?:一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月)[a-z]*[\s]\d{2}[th,]+,trying))
    ->这在
    th之后有空格,因此它将不匹配

  • print(re.findall(r'(?:一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月)[a-z]*[\s]\d{2}[a-z,]+',try])
    ->通过给出
    +/code>,您可以在搜索结束时找到一个或多个
    th、
    ,因此它只匹配到
    th、

  • print(关于findall(r'(?:一月|二月|三月|四月|五月|六月|七月|八月|九月|十月|十一月|十二月)[a-z]*[\s]\d{2}[a-z]+[,],尝试])
    ->类似地,您对子字符串的搜索以
    结束,所以直到
    th,



  • 你想配什么?你也可以发布想要的输出吗?@GarbageCollector Posted,为什么不使用实际的日期分析器呢?我试图找出我的代码有什么问题。每一行发布的代码都为我打印逗号,但不是年份。你想匹配什么?您也可以发布所需的输出吗?@GarbageCollector Posted,为什么不使用实际的日期分析器呢?我正在试图找出我的代码有什么问题。发布的代码行中的每一行都为我打印逗号,但不是年份。您可以使用
    \d{1,2}
    而不是非捕获组来打印日期数字。@Blckknght感谢您的帮助和时间,对于日期数字,您可以使用
    \d{1,2}
    而不是非捕获组。@Blckknght感谢您的帮助和时间,谢谢。最后,我知道了如何编写与grep的
    (ab | ab)c
    相当的Python模式。谢谢。最后,我知道了如何编写与grep的
    (ab | ab)c
    相当的Python模式。