我有一个文本文件,结构如下:
Name1 (Middlename1) LastName
Birthyear
Name2 (Middlename2) LastName
Birthyear
...
NameN (MiddlenameM) LastName
Birthyear
我正在尝试使用RE自动查找名称和年份,但是我不知道如何合并这两个RE,因为这两个信息不在同一行:
import re
regexp = re.compile( r'(( )*)(?P<name>([a-zA-Z]*)( [a-zA-Z]+)? ROCHE)\n'
r'(( )*)(?P<year>18\d\d)\n'
)
两个RE正在独立工作,但不能一起工作。我应该怎么做?
正则表达式:
^(?P<name>(?:[a-z.'-]+(?:\s+[a-z.'-]+)*))\n(?P<year>\d{4})\n Flags: re.M|re.I
^
匹配行的开始。[a-z.'-]+
匹配一个或多个字母,句点,'或-字符。这是一个- 名称元素。
(?:\s+[a-z.'-]+)*
匹配一个或多个空格字符,后跟- name element
。重复0次或更多次。因此,命名组name由1个或多个name elements组成,并由一个或多个空格字符分隔。[\n
匹配换行符。(?P<year>\d{4})\n
匹配4位数字,后跟换行符。
re.finditer
查找连续的匹配项:import re
text = """John Doe
1921
John Q. Public
1987
Anne-Marie Smith
1989
Paul O'Donnell
2001
J. P. Marquand
1893"""
regexp = re.compile(r"^(?P<name>(?:[a-z.'-]+(?:\s+[a-z.'-]+)*))\n(?P<year>\d{4})\n", flags=re.M|re.I)
for m in regexp.finditer(text):
name = m['name']
year = m['year']
# do something with name and year in the second file. Here we are just printing the values.
print(name, year)
打印:
John Doe 1921 John Q. Public 1987 Anne-Marie Smith 1989 Paul O'Donnell 2001