我的Python正则表达式与YYYY日期格式的文本文件中的任何数据都不匹配

我的Python正则表达式与YYYY日期格式的文本文件中的任何数据都不匹配,python,regex,machine-learning,Python,Regex,Machine Learning,我有一个文本文件,其中包含不同格式的日期。e、 g 2014年 2015年 2015年1月7日 2012年1月6日 等等 现在,我正在尝试编写一个正则表达式来打印.txt文件(如2014、2015)中所有YYYY格式的日期 但是,我没有从我执行的代码中获得任何匹配项。谁能帮我解决这个问题?谢谢 我的Python代码: import re for i in "file.txt": match = re.match(r'\d{2}-\d{2}-(\d{4})', i) pr

我有一个文本文件,其中包含不同格式的日期。e、 g

2014年

2015年

2015年1月7日

2012年1月6日

等等

现在,我正在尝试编写一个正则表达式来打印.txt文件(如2014、2015)中所有YYYY格式的日期

但是,我没有从我执行的代码中获得任何匹配项。谁能帮我解决这个问题?谢谢

我的Python代码:

import re

for i in "file.txt":

    match = re.match(r'\d{2}-\d{2}-(\d{4})', i)

    print(match)
电流输出:

None

None

None

None

None

None

有三个问题:第一,您没有实际打开文件。因此,“file.txt”中i的
实际上返回字母“f”,“i”。。。在每个循环迭代中。其次,正则表达式正在查找DD-MM-YYYY,它不在示例文件中。最后,
match
不是可以打印的字符串。相反,此代码可以工作:

import re
myfile = open("file.txt", "r")
for i in myfile:
    match = re.match(r'\d{4}$', i[:-1])
    print(match.string)

有三个问题:第一,您没有实际打开文件。因此,“file.txt”中i的
实际上返回字母“f”,“i”。。。在每个循环迭代中。其次,正则表达式正在查找DD-MM-YYYY,它不在示例文件中。最后,
match
不是可以打印的字符串。相反,此代码可以工作:

import re
myfile = open("file.txt", "r")
for i in myfile:
    match = re.match(r'\d{4}$', i[:-1])
    print(match.string)

试试这种代码的和平

dates.txt看起来像这样

2014
2015
January 7, 2015
6th January 2012
下面是以YYYY格式仅提取年份的代码

>>> f = open("/Users/kgowda/Desktop/my_work/play/dates.txt",'r')
>>> [re.search(r'\d{4}', x).group() for x in f.readlines() if x]
['2014', '2015', '2015', '2012']
如果要删除重复项,请使用
set

>>> set([re.search(r'\d{4}', x).group() for x in f.readlines() if x])
set(['2015', '2014', '2012'])
如果你喜欢下面的文本文件内容

2014
2015
January 7, 2015
6th January 2012
0,2006 1,2007 2,2008 3,4 March 2014 4,"April 10, 2013" 5,7 August 2007
使用
findall
获取YYYY

>>> [re.findall(r'\d{4}', x) for x in f.readlines() if x]
[['2014'], ['2015'], ['2015'], ['2012'], ['2006', '2007', '2008', '2014', '2013', '2007']]

试试这种代码的和平

dates.txt看起来像这样

2014
2015
January 7, 2015
6th January 2012
下面是以YYYY格式仅提取年份的代码

>>> f = open("/Users/kgowda/Desktop/my_work/play/dates.txt",'r')
>>> [re.search(r'\d{4}', x).group() for x in f.readlines() if x]
['2014', '2015', '2015', '2012']
如果要删除重复项,请使用
set

>>> set([re.search(r'\d{4}', x).group() for x in f.readlines() if x])
set(['2015', '2014', '2012'])
如果你喜欢下面的文本文件内容

2014
2015
January 7, 2015
6th January 2012
0,2006 1,2007 2,2008 3,4 March 2014 4,"April 10, 2013" 5,7 August 2007
使用
findall
获取YYYY

>>> [re.findall(r'\d{4}', x) for x in f.readlines() if x]
[['2014'], ['2015'], ['2015'], ['2012'], ['2006', '2007', '2008', '2014', '2013', '2007']]

谢谢你的建议。我尝试了您的解决方案,但是,我收到以下错误消息-AttributeError:“NoneType”对象没有属性“string”。然后我从打印中删除了“.string”(match.string)。错误消息消失了,但它仍然输出多个不匹配的“无”文本行。如果不想打印不匹配的行,则必须相应地添加
If
语句。另外,您使用的是什么版本的python?看起来您正在使用python3,
match.string
在python3.4.7上运行良好。我刚刚试过,它在Python2.7.13上也运行得很好。我有Python2.7.10和Python3.6.3以及PyCharm社区版2017.2.4。我尝试了这两个代码,但仍然得到多个“无”行,没有匹配项。不确定发生了什么。@user8929822您可以尝试
match=re.search(r'\d{4}',i[:-1])
(或使用
(r'\b\d{4}\b'
),然后打印
match.group()
。感谢您的建议。我尝试了您的解决方案,但是,我收到了以下错误消息-AttributeError:“非类型”对象没有属性“字符串”。然后我从打印(match.string)中删除了“.string”。错误消息消失了,但它仍然输出多个“无”没有匹配项的文本行。如果不想打印不匹配的行,则必须相应地添加一个
If
语句。另外,您使用的是什么版本的python?看起来您正在使用python3,并且
match.string
在python3.4.7上运行良好。我刚刚尝试过,在Python2.7.13上也运行良好。我有pythonhon 2.7.10和PyCharm Community Edition 2017.2.4的Python 3.6.3。我在这两个版本上都尝试了代码,但仍然得到了多个没有匹配项的“无”行。不确定发生了什么。@user8929822您可以尝试
match=re.search(r'\d{4}',I[:-1])
(或者使用
(r'\b\d{4}\b'
),然后打印
match.group()