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

2024-10-08 22:20:35 发布

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

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

| 
...........................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 vorbhalten”或“All Rights Reserved”[\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做反向搜索时,它匹配任何一篇文章(根据需要)。但是当我向前搜索时,它匹配整个文档。你知道吗

一开始我以为它和任何一篇文章都匹配,后来看起来好像它和所有的东西都匹配。但后来我尝试了替换选项,结果我的测试术语只被替换了一次。你知道吗

所以RE没有做好它的工作。我已经在这方面做了一段时间了,但是找不到我的错误。你知道吗

我做错了什么?-我的简历有错误吗?你知道吗

我打算匹配这些文章,将正在工作的RE转换成一个捕获组,然后用一些xml替换它。但我被困在这里了。你知道吗

干杯, 安德鲁


Tags: remore文章模式etcall字符单词
1条回答
网友
1楼 · 发布于 2024-10-08 22:20:35

诀窍是使匹配文章主体的部分不贪婪,并为文章定义非常清晰的开始和结束匹配。你知道吗

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

只是重复一下假设:

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

相关问题 更多 >

    热门问题