python - 正则表达式匹配以 `- [` 开头的最后一行
问题描述
我有一个指定的主体块,其中包含一个 GitHub Markdown 列表,格式如下:
**HEADERONE**
- [x] Logged In
- [ ] Logged Out
- [x] Spun Around
- [x] Did the hokey pokey
但是该列表被其他垃圾包围,如下所示:
A body paragraph about other things. Lorem ipsom and all that
**HEADERONE**
- [x] Logged In
- [ ] Logged Out
- [x] Spun Around
- [x] Did the hokey pokey
Maybe a link here www.go_ogle.com
Another list that isn't important
- [ ] Thing one
- [ ] Thing two
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
我可以在抓取后以编程方式截断字符串,但我很好奇是否有一种非常干净的方式来抓取我的列表?标题总是相同的,所以从**HEADERONE**
双新行的第一个实例开始抓取就可以了。不过,从最后一行抓取**HEADERONE**
到最后一行- [
将是惊人的。
我正在使用
\*\*HEADERONE\*\*[^*]*?(?=\n{2})
但是虽然这在 regex101 中有效,re.search("\*\*HEADERONE\*\*[^*]*?(?=\n{2})",body)
但由于某种原因没有返回。所以我把它切换到
\*\*HEADERONE\*\*[\S\s]*?(?=\n{2})
但这太过分了,包括第二个列表。有什么想法吗?
解决方案
您可以使用以下内容找到\*\*HEADERONE\*\*
第一个空行之间的所有内容:
^(\*\*HEADERONE\*\*[\s\S]*?)^\s*$
[\s\S]*?
匹配所有字符,包括换行符,直到第一个空行。如果有可能没有空行或字符串结尾,您可以轻松地将该测试添加到表单中:
^(\*\*HEADERONE\*\*[\s\S]*?)(?:^\s*$|\Z)
如果您想使用 Python 非正则表达式来获取该块,并且这些块由两个或更多新行分隔,您可以执行以下操作:
print('\n'.join(block for block in s.replace('\r\n', '\n').split('\n\n') if block.lstrip().startswith('**HEADERONE**')))
或者,如果您有文件:
print('\n'.join(block for block in fo.read() if block.lstrip().startswith('**HEADERONE**')))
fo
在文件模式下打开的文件在哪里'U'
。
推荐阅读
- c++ - 使用 CMake 的驱动程序的多个交叉编译目标
- python - 使用 Detectron2 进行每图像模型评估
- python - Excel错误可能是由熊猫写作或大数据引起的?需要建议
- php - Ajax 在 json _encode() codeigniter 之后返回 undefined
- solr - 如何在 SOLR 可搜索文本中关联分段元数据
- java - Jackson ObjectMapper:如何从序列化中省略(忽略)某些类型的字段?
- python - 一些帮助需要 selenium python 定位名称
- java - NetBeans 12.0:“类没有主方法”(但有)
- java - 通过单击在 Mac Big Sur 上运行 .jar 文件
- javascript - devtools - 当所有网络请求完成时,向后台页面发送消息