我有下一个文字:
#Header
my header text
##SubHeader
my sub header text
###Sub3Header
my sub 3 text
#Header2
my header2 text
我需要选择“#Header”中的文字到“#Header2”。
我试着写了regexp:http://regexr.com/3ffva,但它与我需要的不匹配。
答案 0 :(得分:1)
基本思路:找到第一级-1标题,找到任何文本直到 ......第二级-1标题。
^#[^#\n]+
第一级-1标题
^
行首(由于多行标志)[^#\n]+
任何不是#
或换行符的字符。重复一次或多次。([\W\w]*?)
任何文字,直到下一个匹配的部分^#[^#\n]+
第二级-1标题(见上文)标志:多线。
答案 1 :(得分:0)
在下一个标题之前展望关闭捕获和匹配:
1-没有多行标志
(^|\n)#([^#]+?)\n([^]+?)(?=\n#[^#]|$)
说明
第1组首先捕获#后面的字符串或新行,而没有其他#,这意味着新的标题从那里开始。
第2组捕获标题
第3组捕获任何东西直到下一个标题或结尾
第4组是非捕获的,展望新标题或文本结尾。
2-带有多行标志
^#([^#]+?)\n([^]+?)(?=^#[^#])
说明
首先,在文本末尾添加#--
,以便通过此正则表达式匹配最后一个标题!
从第^
行的第一个字符开始匹配,并在标题文本中匹配#
而不包含#。在\n
第2组捕获文本直到下一个标题开始,在起始行只有一个#。
答案 2 :(得分:0)
根据您的正则表达风格,您可以使用:
(^#{1}.+)(.*\n)*
或者,您可以使用Vim非常神奇的模式:
\v(^#{1}.+)(.*\n)*(^#{1}\w+)