我正在尝试对像这样的字符串输出进行正则表达式匹配
awfjioawjeawef oiajweoifjawoief
oiawjobjoia oiafwjeoifawjeiofw
Start of my Desired Text
indented group 1 {some random text}
indented group 2 {some random text}
sub indented group 1 {some large random
...
text}
sub indented group 2 {some random text}
indented group 3
sub indented group 3
indented group 4 {some large random
...
text}
indented group 5 {some random text}
End of my Desired Text
non-indeted group1 {some random text}
non-indented group2 {some large random
...
text}
最终,我希望能够像这样获得“缩进组”的名称:
['indented group 1', 'indented group 2', 'sub indented group 1', 'sub indented group 2', 'indented group 3', 'sub indented group 3', 'indented group 4', 'indented group 5']
我正在尝试使用此正则表达式:
(\n\s+([\w\s\-\,]+).*\{)+
但是,我无法像上面那样捕获它,最终它无法捕获到“我的所需文本的开始”和“我的所需文本的结束”之外。有什么建议吗? (这是正则表达式链接https://regex101.com/r/LsxhlH/1/) 我想在一个正则表达式中获取所有内容,而不是拆分为多个。我无法让比赛中的子比赛表现得很好。
答案 0 :(得分:1)
基本上是两步操作。
1。获取所需文本的开头/结尾之间的文本:
(?<=Start[ ]of[ ]my[ ]Desiried[ ]Text)[\S\s]+(?=End[ ]of[ ]my[ ]Desiried[ ]Text)
https://regex101.com/r/jj8hfQ/1
2。使用步骤1的结果,并在该匹配字符串上运行全局findall正则表达式,以获取名称数组:
(?m)^[^\S\r\n]+([\w\s\-\,]+?)[^\S\r\n]*?(?:\{|\r?\n)
https://regex101.com/r/LkOIWt/1
解释:
(?m) # Multi-line mode
^ # BOL
[^\S\r\n]+ # Required some horizontal whitespace (indent, trim)
( [\w\s\-\,]+? ) # (1), The indented name
[^\S\r\n]*? # Trailing horizontal whitespace (trim)
(?: \{ | \r? \n ) # Required, either a { or a linebreak