python - 用于捕获部分字符串的正则表达式

标签 python regex markdown regex-lookarounds regex-group

我正在尝试使用 Python 的 re 库在 .md 文档中获取顶级 Markdown 标题(即以单个散列开头的标题 -- # Introduction),但我终究无法解决这个问题。

这是我要执行的代码:

import re

pattern = r"(# .+?\\n)"

text = r"# Title\n## Chapter\n### sub-chapter#### What a lovely day.\n"

header = re.search(pattern, text)
print(header.string)

print(header.string) 的结果是:

# Title\n## Chapter\n### sub-chapter#### 多么美好的一天。\n 而我只想要 # Title\n

这个关于 regex101 的例子说它应该可以工作,但我不明白为什么不行。 https://regex101.com/r/u4ZIE0/9

最佳答案

你得到那个结果是因为你使用了调用 .stringheader.stringMatch object 上这将返回传递给 match() 或 search() 的字符串。

字符串中已经有换行符:

text = r"# Title\n## Chapter\n### sub-chapter#### What a lovely day.\n"

因此,如果您使用您的模式(请注意,它也将匹配换行符),您可以将代码更新为:

import re

pattern = r"(# .+?\\n)"
text = r"# Title\n## Chapter\n### sub-chapter#### What a lovely day.\n"
header = re.search(pattern, text)
print(header.group())

Python demo

请注意 re.search查找正则表达式产生匹配项的第一个位置。

匹配您的值的另一个选项可能是从字符串的开头匹配 # 后跟一个空格,然后是除换行符之外的任何字符,直到字符串结尾:

^# .*$

例如:

import re

pattern = r"^# .*$"
text = "# Title\n## Chapter\n### sub-chapter#### What a lovely day.\n"
header = re.search(pattern, text, re.M)
print(header.group())

Python demo

如果后面不能再有#,你也可以使用negated character class不匹配 # 或换行符:

^# [^#\n\r]+$

关于python - 用于捕获部分字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56310045/

相关文章:

python - Kivy.Clock,如何返回和访问从预定方法返回的变量?

python - 如何在 django Rest API 中向路由器提供参数?

python - 正则表达式从python中的字符串中提取子字符串

visual-studio-code - 使 VScode 自动高亮 .text 文件为 Markdown

latex - 从 Latex .toc 文件中生成用于 Markdown 的目录

Python csv writerows 重新格式化日期时间以包括秒

regex - 使用特殊字符重写 URL

c# - 如何删除多行 C# 正则表达式中包含匹配项的整行?

regex - 折叠并捕获单个Regex表达式中的重复模式

html - 有没有办法阻止顺风覆盖 Markdown 默认间距?