Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于捕获字符串的一部分的正则表达式_Python_Regex_Markdown_Regex Lookarounds_Regex Group - Fatal编程技术网

Python 用于捕获字符串的一部分的正则表达式

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

我试图用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.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]+$