要跨越多行的正则表达式

2024-05-15 12:15:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含大量非结构化数据的文本文件,我试图使用1个正则表达式从中提取姓名和生日。到目前为止,我遇到的问题是,日期可以在一行结束,在另一行继续,而re.DOTALL似乎不起作用。我想要的数据格式始终为:

姓氏,中间名(有时),名字,f。年月日

这是我的正则表达式:

re.findall(r'\w+,*\sf\.\s\d\d-\d\d-\d\d\d\d', re.DOTALL):

这不会得到以下换行符:

史密斯,约翰

f。25-12-1990

或仅限于以下第一部分:

史密斯,约翰,f。25-12-

1990年

史密斯,约翰,f。25-

12-1990


Tags: 数据resf名字结构化姓名数据格式文本文件
1条回答
网友
1楼 · 发布于 2024-05-15 12:15:32

如果希望所有选项与可能换行的日期匹配,可以在所有字符之间重复空白字符0+次

请注意,在您的模式中,重复逗号0+次,*,而不是\s

使用re.DOTALL使.匹配换行符,但在您的模式中,您使用的不是点,而是文字点\.

\s将匹配包含换行符的空白字符。在数据中,日期部分之间有多个换行符。您还可以使用[\r\n]*来匹配中间的换行符

\w+,\s*f\s*\.\s*\d\s*\d\s*-\s*\d\s*\d\s*-\s*\d\s*\d\s*\d\s*\d

Regex demoPython demo

如果中断仅在连字符之后:

\w+,\s*f\s*\.\s*\d\d-\s*\d\d-\s*\d\d\d\d

Regex demoPython demo

相关问题 更多 >