[英]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.