我正在尝试提供一个正则表达式,该表达式匹配我所安排的文本文件中的文章的特定模式。 (注意:“|”表示段落标记/换行符,而“。”表示一些非单词字符。)这是模式
|
...........................Dokument.1.von.55|
|
|
|
..........................Some newspaper|
|
..........................Freitag 08. Mai 2015
|
sometextsometextsometextsometextsometextsometextsometextsometextsometextsometext
sometextsometextsometextsometextsometextsometextsometextsometextsometextsometext
(etc..)
|
METAINFO1: IWOIOWIEOWEIWOEIWEO
|
(etc... possibly more metainfo all capitalized)
|
|
.........................Copyright 2015 some publisher notes
.........................at most one more single line containing copyright information
.........................Alle Rechte vorbehalten|
# note: last line alternatively: All Rights Reserved
|
(next pattern i.e. article)
(我必须将其匿名用于版权目的)
我创建了以下正则表达式来提取单篇文章:
^[\r\n]
[\W]+Dokument \d{1,} von \d{1,}
[\r\n]+
[\w\W]+
[r\n]
[\W]+(Alle Rechte vorbehalten|All Rights Reserved)
$
因此,整个RE是^[\r\n][\W]+Dokument \d{1,} von \d{1,}[\r\n]+[\w\W]+[\r\n][\W]+(Alle Rechte vorbehalten|All Rights Reserved)$
我用Textpad测试过它。当我使用RE进行向后搜索时,它匹配任何单个文章(根据需要)。但是当我进行前向搜索时,它与整个文档相匹配。
起初我认为它匹配任何文章,然后看起来如果它匹配一切。但后来我尝试了替换选项,结果是我的测试术语只被替换一次。
所以RE没有做好自己的工作。我一直在研究这个问题已经有一段时间但是找不到我的错误。
我做错了什么? - 我的RE中有错误吗?
我打算匹配文章,将工作RE转换为捕获组,然后用一些xml替换它。但我被困在这里。
干杯, 安德鲁
答案 0 :(得分:1)
诀窍是制作与文章正文非贪婪相匹配的部分,并为文章定义非常明确的开始和结束匹配。
re.compile(r'^\n\W+Dokument.+?\n\W+Copyright[^\n]+\n(?:[^\n]+\n)?', flags=re.S)
重新思考这些假设: