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

时间:2019-05-26 01:45:14

标签: 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#### What a lovely day.\n而我只想要# Title\n

此示例在regex101上说应该起作用,但我不知道为什么不起作用。 https://regex101.com/r/u4ZIE0/9

2 个答案:

答案 0 :(得分:2)

之所以得到该结果,是因为您使用header.string,它在.string上调用Match object,这将使您返回传递给match()或搜索{{1} }。

该字符串中已经包含换行符:

()

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

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

Python demo

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

另一个与您的值匹配的选项可能是从字符串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

如果之后没有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()) ,则还可以使用negated character class来匹配#或换行符:

#

答案 1 :(得分:1)

我猜想我们希望提取{ "cards": [ { "Name": "copper", "Cost": 0 }, { "Name": "silver", "Cost": 3 }, { "Name": "gold", "Cost": 6 }, { "Name": "curse", "Cost": 0 }, { "Name": "estate", "Cost": 2 }, { "Name": "duchy", "Cost": 5 }, { "Name": "province", "Cost": 8 } ] } ,在这种情况下,只需稍加修改,您的表情就可以正常工作

# Title\n

DEMO

测试

(# .+?\\n)(.+)
相关问题