我试图使用正则表达式打印它
trying = 'Mar 20th, 2009'
我不能在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))
所需的输出应该是输入字符串。我究竟做错了什么?
这会奏效
>>> 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 (re.findall(r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*[\s]\d{2}[th , ]+', trying))
- >这在th
之后有空间所以它不匹配print (re.findall(r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*[\s]\d{2}[a-z,]+', trying))
- >通过给+
,你搜索结束找到一个或多个th,
所以它只匹配到th,
print (re.findall(r'(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-z]*[\s]\d{2}[a-z]+[,]', trying))
- >类似地,你搜索子字符串以,
结束所以macthes直到th,
试试这个正则表达式
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']