Python 匹配文本中的重复模式序列
我对正则表达式非常陌生,不知道如何做我想做的事情。我有一个文本文件作为输入,想从中提取“文章”。问题是,如果我每行阅读一行文本,它就不能覆盖整篇文章,因为它在遇到回车时停止 我想做的是从特定模式中提取所有内容,直到它重复,无论它是否遇到回车符(Python) 序列示例:Python 匹配文本中的重复模式序列,python,regex,Python,Regex,我对正则表达式非常陌生,不知道如何做我想做的事情。我有一个文本文件作为输入,想从中提取“文章”。问题是,如果我每行阅读一行文本,它就不能覆盖整篇文章,因为它在遇到回车时停止 我想做的是从特定模式中提取所有内容,直到它重复,无论它是否遇到回车符(Python) 序列示例: Article ler — NOM Latius iam disseminata licentia onerosus bonis omnibus Caesar nullum post haec adhibens modum or
Article ler — NOM
Latius iam disseminata licentia onerosus bonis omnibus Caesar nullum post haec adhibens modum orientis latera cuncta vexabat nec honoratis parcens nec urbium primatibus nec plebeiis.
Article 2 — ANNEE
Nemo quaeso miretur, si post exsudatos labores itinerum longos congestosque adfatim commeatus fiducia vestri ductante barbaricos pagos adventans velut mutato repente consilio ad placidiora deverti.
Article 3 — DATE Ego vero sic intellego, Patres conscripti, nos hoc tempore in provinciis decernendis perpetuae pacis habere oportere rationem.
这是我设计的正则表达式:“^(.*(?=(?)I)article(\s\d{1,2})*).”
作为输出,我得到如下结果:
Article ler — NOM
Article 2 — ANNEE
Article 3 — DATE Ego vero sic intellego, Patres conscripti, nos hoc tempore in provinciis decernendis perpetuae pacis habere oportere rationem.
前两个没有涵盖整篇文章(标题+内容):这是我的问题。
有人知道怎么解决吗
谢谢
您的问题在于读取文件的方式。如果遍历文件中的行,则无法获得多行匹配。相反,如果您想使用regex,请立即读取整个文件 (旁注:在不使用正则表达式的情况下,可能有更好的方法来实现此结果。)
另外,我假设第一行的示例文本中有一个打字错误。你写了
“Article ler”
,但我想你的意思是“Article 1er”
(数字1
,而不是字母l
)。如果我不进行此更改,您将无法获得第一篇文章,因为模式正在查找后跟1或2位数字的“文章”。您的问题是读取文件的方式。如果遍历文件中的行,则无法获得多行匹配。相反,如果您想使用regex,请立即读取整个文件
(旁注:在不使用正则表达式的情况下,可能有更好的方法来实现此结果。)
另外,我假设第一行的示例文本中有一个打字错误。你写了
“Article ler”
,但我想你的意思是“Article 1er”
(数字1
,而不是字母l
)。如果我不进行此更改,您将无法获得第一篇文章,因为模式正在查找后跟1或2位数字的“文章”。如果可能,请阅读整个文件文本,并对该文本应用以下正则表达式:
(?<=Article)[\s\S]*?(?=Article|$)
(?如果可能,请阅读整个文件文本并对该文本应用以下正则表达式:
(?<=Article)[\s\S]*?(?=Article|$)
(?事实上,打字是文本的一部分…其中有一些噪音:/事实上,打字是文本的一部分…其中有一些噪音:/我让我的代码使用这种模式,但我不得不将$
更改为\Z
。这可能与从文件中读取字符串的方式有关吗?对此的解释,您可以看到,是不是是否可以在匹配中包含“Article”一词?:)@Sol是的,只需将正则表达式改写为“哈哈,太完美了!”但是“\n”符号出现在匹配项中;也许我可以在之后删除它?我让我的代码使用此模式,但我必须将$
更改为\Z
。这可能与从文件中读取字符串的方式有关吗?关于这一点的解释,您可以看到,是否可以在匹配项中包含单词“Article”@索尔:是的,把正则表达式改写成哈哈,太完美了!不过,匹配中出现了“\n”符号;也许我可以删除它?
MATCH 1:
Article 1er - NOM
Latius iam disseminata licentia onerosus bonis omnibus Caesar nullum post haec adhibens modum orientis latera cuncta vexabat nec honoratis parcens nec urbium primatibus nec plebeiis.
MATCH 2:
Article 2 - ANNEE
Nemo quaeso miretur, si post exsudatos labores itinerum longos congestosque adfatim commeatus fiducia vestri ductante barbaricos pagos adventans velut mutato repente consilio ad placidiora deverti.
MATCH 3:
Article 3 - DATE Ego vero sic intellego, Patres conscripti, nos hoc tempore in provinciis decernendis perpetuae pacis habere oportere rationem.
(?<=Article)[\s\S]*?(?=Article|$)