正则表达式捕获缩进的块名称

时间:2019-06-30 20:16:48

标签: python regex

我正在尝试对像这样的字符串输出进行正则表达式匹配

  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/) 我想在一个正则表达式中获取所有内容,而不是拆分为多个。我无法让比赛中的子比赛表现得很好。

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