使用正则表达式在大括号之间递归地捕获分组。

huangapple go评论108阅读模式
英文:

Capture groups recursively with regex between braces

问题

如何编写一个正则表达式来捕获这些结构的每个组?

尝试了这个,但只是捕获了全部内容 (.*{.*}$)

想要为每个结构都有一个组,以便可以单独提取每个结构

  1. (NewRequest\s*\{.*?\})|(NewResponse\s*\{.*?\})

完整的结构:

  1. (NewRequest\s*\{.*?\})|(NewResponse\s*\{.*?\})

请注意,这是一个正则表达式,用于匹配文本中的模式。你可以使用编程语言中的正则表达式函数来提取每个匹配的组。

英文:

How to write a regex, that capture every group of these structures?

Tried this, but this just captures everything (.*{.*}$)

Want to have a group for each so that I can extract each one individually

  1. NewRequest {
  2. string id = 1;
  3. string name = 2;
  4. }
  1. NewResponse {
  2. int64 id = 1;
  3. string name = 2;
  4. }

Complete structure:

  1. NewRequest {
  2. string id = 1;
  3. string name = 2;
  4. }
  5. NewResponse {
  6. int64 id = 1;
  7. string name = 2;
  8. }
  9. NewResponse {
  10. int64 id = 1;
  11. string name = 2;
  12. }
  13. NewResponse {
  14. int64 id = 1;
  15. string name = 2;
  16. }
  17. NewResponse {
  18. int64 id = 1;
  19. string name = 2;
  20. }

答案1

得分: 1

你可以使用以下正则表达式进行匹配:

  1. (?s)\w+\s*\{.*?}
  2. \w+\s*\{[^{}]*}

详细解释如下:

  • (?s) - DOTALL 修饰符,表示匹配任意字符,包括换行符。
  • \w+ - 一个或多个单词字符。
  • \s* - 零个或多个空白字符。
  • \{ - 匹配 { 字符。
  • .*? - 匹配任意字符,尽可能少的匹配。
  • } - 匹配 } 字符。

你可以参考正则表达式演示进行测试。

英文:

You can use

  1. (?s)\w+\s*\{.*?}
  2. \w+\s*\{[^{}]*}

See the regex demo.

Details:

  • (?s) - a DOTALL modifier
  • \w+ - one or more word chars
  • \s* - zero or more whitespaces
  • \{ - a { char
  • .*? - any zero or more chars as few as possible
  • } - a } char.

huangapple
  • 本文由 发表于 2022年7月1日 15:39:42
  • 转载请务必保留本文链接:https://go.coder-hub.com/72825909.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定