Markdown:Regex查找标题#2之后的所有内容(但在另一个标题#2处停止)
我有一些降价文件,有时只有一个H2,但有时也有几个:Markdown:Regex查找标题#2之后的所有内容(但在另一个标题#2处停止),regex,Regex,我有一些降价文件,有时只有一个H2,但有时也有几个: # This is H1 Some content. ## This is a H2 Some more content. ## This is another H2 Even more content. 我正在用Ruby编写一个方法来提取这些H2s的含量。例如,我想提取第一个H2的内容。为此,我们提出了以下正则表达式: ^## This is a H2\n\n(.*)\n\n## 可悲的是,只有当降价中有另一个H2时,这才有效
# This is H1
Some content.
## This is a H2
Some more content.
## This is another H2
Even more content.
我正在用Ruby编写一个方法来提取这些H2s的含量。例如,我想提取第一个H2的内容。为此,我们提出了以下正则表达式:
^## This is a H2\n\n(.*)\n\n##
可悲的是,只有当降价中有另一个H2时,这才有效。但我不知道如何使最后一部分\n\n##
成为可选的,因为向它添加?
(^\n###In Kürze\n\n(.*)[\n\n##]
)将使它只对一个H2起到降价的作用,但在有几个H2时将捕获所有后续H2s及其内容
我希望你明白我的意思。我只想得到一个H2的含量,不管有多少个H2
你可以在这里玩我的作品:我相信这种模式解决了你的问题。它匹配H2节的内容,并在H1/H2节的开头以及文件的结尾处终止
/(?:^|\n)##\s[^\n]*\n(.*?)(?=\n##?\s|$)/gs
启用的标志应该是global和singleline,不能使用多行模式,因为H2s的特殊逻辑一直持续到文件的末尾。使用正则表达式解析的内容有限制,你有没有研究过实际的标记解析器?我想你想要在Kürze\R{2}(.*(::::(?)#+)*)/]Magic!非常感谢,它对我的目的非常有效。我在
[^\n]*\n
中添加了一个+
,因为在标题后面可以有几个换行符:。并且仅用于记录:要搜索特定的H2,需要将[^\n]*
替换为例如:“这是一个H2”。在Ruby中,g
修饰符是未知的。我似乎不需要它与.match
方法一起使用。此外,s
修饰符似乎与unicode有问题,导致不兼容的编码regexp匹配(Windows-31J regexp与UTF-8字符串)
。我也删除了它。我在这里发布了一个后续问题:
/(?:^|\n)##\s[^\n]*\n(.*?)(?=\n##?\s|$)/gs