Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 匹配文本中的重复模式序列_Python_Regex - Fatal编程技术网

Python 匹配文本中的重复模式序列

Python 匹配文本中的重复模式序列,python,regex,Python,Regex,我对正则表达式非常陌生,不知道如何做我想做的事情。我有一个文本文件作为输入,想从中提取“文章”。问题是,如果我每行阅读一行文本,它就不能覆盖整篇文章,因为它在遇到回车时停止 我想做的是从特定模式中提取所有内容,直到它重复,无论它是否遇到回车符(Python) 序列示例: Article ler — NOM Latius iam disseminata licentia onerosus bonis omnibus Caesar nullum post haec adhibens modum or

我对正则表达式非常陌生,不知道如何做我想做的事情。我有一个文本文件作为输入,想从中提取“文章”。问题是,如果我每行阅读一行文本,它就不能覆盖整篇文章,因为它在遇到回车时停止

我想做的是从特定模式中提取所有内容,直到它重复,无论它是否遇到回车符(Python)

序列示例:

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|$)