繁体   English   中英

通过使用正则表达式匹配在两个字符串之间选择文本

[英]Selecting text between two strings by matching using regex

我知道有类似的帖子可以获取两个字符串之间的文本,但即使经过多次尝试,我也无法弄清楚我的代码有什么问题,所以我决定发布一个问题。 我尝试使用正则表达式的文本数据如下所示:

* * *

  

level a20. heading1 random

  

paragraph 1
paragraph 2


paragraph 3
  

* * *

paragraph 4

paragraph 5

* * *

  

level b22. random-heading2

  

someparagraphs...

我的目标是获得 a20 级之间的所有文本。 标题 1 随机到 * * * 级别 b22。 随机标题2。 我能够使用找到文本的开头

regex = r"^\* \* \*[ \t\n\r\f]+level \S+ heading random"

但是当我尝试添加正则表达式的其余部分时,代码无法获取文本

regex_full = r"^\* \* \*[ \t\n\r\f]+level \S+ heading random(.*?)\* \* \*[ \t\n\r\f]+level \S+ [a-z]+"
re.finditer(regex_full, above_text_data, re.MULTILINE | re.DOTALL)

因为我确定 'heading random' 但在不同的文档中,另一个标题 ('random-heading2') 发生了变化,它甚至可能是一两个词。 有人可以突出显示 regex_full 表达式的错误是什么,以获取 a20 级之间的所有文本。 标题 1 随机到 * * * 级别 b22。 随机标题2? 在 regex101.com 上,它显示错误为“您的正则表达式与主题字符串不匹配。”

* * *

  

level a20. heading1 random


TEXT OF INTEREST
* * *
  

level b22. random-heading2

可能是这个

r"\\* \\* \\*\\s*level a20\\. heading1 random\\s*(.*?)\\s*\\* \\* \\*\\s*level b22\\. random-heading2"

捕获组 1 包含修剪的内容。

如果要在两个字符串之间选择文本(包括换行符):

(?<=level a20. heading1 random)[\s\S]*?(?=level b22. random-heading2)

可以工作

暂无
暂无

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

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