Python 用于捕获字符串的一部分的正则表达式
我试图用Python的re库获取.md文档中的顶级降价标题(即以单个哈希开头的标题--#简介),但我一辈子都搞不懂这一点 以下是我试图执行的代码:Python 用于捕获字符串的一部分的正则表达式,python,regex,markdown,regex-lookarounds,regex-group,Python,Regex,Markdown,Regex Lookarounds,Regex Group,我试图用Python的re库获取.md文档中的顶级降价标题(即以单个哈希开头的标题--#简介),但我一辈子都搞不懂这一点 以下是我试图执行的代码: 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) 打印(header.s
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)
打印(header.string)
的结果是:
#Title\n#############分章#####多好的一天.\n
而我只想要#Title\n
regex101上的这个例子说它应该可以工作,但我不明白为什么不能 我猜我们希望提取
#Title\n
,在这种情况下,您的表达式似乎工作正常,只需稍加修改:
(# .+?\\n)(.+)
试验
之所以得到这个结果,是因为您使用了
header.string
,它正在调用一个函数,该函数将返回传递给匹配()
或搜索()
的字符串
字符串中已包含换行符:
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())
请注意,查找正则表达式生成匹配项的第一个位置
另一个匹配值的选项可以是从字符串的开头开始匹配a#
,然后是空格,然后是除换行符以外的任何字符,直到字符串的结尾:
^# .*$
例如:
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())
如果之后不能再出现任何
,您也可以使用a来匹配非
或换行符:
^# [^#\n\r]+$
啊,就是这样!如果我刚刚打印了print(header)
,我会发现它是正确匹配的。非常感谢。
^# [^#\n\r]+$