繁体   English   中英

正则表达式:匹配特定模式之间的任何内容

[英]regular expression: match anything between specific pattern

我试图提出一个与特定模式匹配的正则表达式,通过该正则表达式可以排列文本文件中的文章。 (注意:“ |”表示段落标记/换行符,而“。”表示一些非单词字符。)这是模式

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

(出于版权目的,我不得不将其匿名化)

我创建了以下正则表达式来提取单个文章:

  1. 匹配行首,后跟换行符^[\\r\\n]
  2. 匹配包含“ Dokument ....”的行,其后跟非单词字符[\\W]+Dokument \\d{1,} von \\d{1,}
  3. 匹配任意数量的换行符[\\r\\n]+
  4. 匹配任何单词和非单词字符(即文章的文本) [\\w\\W]+
  5. 匹配最后一个换行符(下一个模式开始之前的最后一行) [r\\n]
  6. 匹配任何非单词字符和字符串“ Alle Rechte vorbehalten”或“保留所有权利” [\\W]+(Alle Rechte vorbehalten|All Rights Reserved)
  7. 匹配行尾(最后一行) $

因此,整个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进行向后搜索时,它会匹配任何单个文章(根据需要)。 但是,当我进行正向搜索时,它会匹配整个文档。

起初,我认为它与任何文章都匹配,然后看起来好像是否与所有内容都匹配。 但是后来我尝试了replace选项,结果是我的测试术语只被替换了一次。

因此,可再生能源不履行职责。 我已经为此工作了一段时间,但找不到我的错误。

我做错了什么? -我的RE有错误吗?

我打算匹配文章,将工作中的RE变成一个捕获组,然后将其替换为一些xml。 但是我被困在这里。

干杯,安德鲁

诀窍是使与文章正文匹配的部分不贪心 ,并为文章明确定义开始和结束匹配。

re.compile(r'^\n\W+Dokument.+?\n\W+Copyright[^\n]+\n(?:[^\n]+\n)?', flags=re.S)

仅重申一下假设:

  • 以换行符开头,然后是包含非单词字符的行,然后是“ Dokument”
  • 包含一个充满任何字符的正文。
  • 以换行符结尾,然后是非单词字符行,其后是“版权”,然后是更多字符和换行符。
  • 可以选择包含多行字符,后跟换行符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM