如何获得使用正则表达式嵌套在另一个组中的重复组?

柏油

我有这些示例类型的字符串:

"System.Collections.Generic.IEnumerable`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"

"System.Collections.IEnumerable"

"System.Collections.Generic.Dictionary`2[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Type, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"

"Whatever`3[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[ImaginaryType],[System.Type, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"

使用正则表达式,我想提取main-type,其泛型类型计数以及所有泛型类型本身,因此对于上面的四个示例,我相应地“捕获”了这些元素:

"System.Collections.Generic.IEnumerable"
    1
    "System.String"

"System.Collections.IEnumerable"
    0

"System.Collections.Generic.Dictionary"
    2
    "System.Int32"
    "System.Type"

"Whatever"
    3
    "System.Int32"
    "ImaginaryType"
    "System.Type"

有没有可以做到这一点的正则表达式?

卡西米尔和希波吕特

您可以使用以下模式进行操作:

string pattern = @"
(?:   # two possible entry points
    \G(?!\A)       # contigous to the precedent match
  |                # OR
    \A             # at the start of the string
    (?<main> [^`]+ )  ` (?<number> [0-9]+ ) \[
)

\[ (?<type> [^],]+ ) # generic type
[^]]* ]              # all until the next closing square bracket
(?: , | ]\z )

| \A (?<main> [^`]+ ) # or a main-type without generic types
";

RegexOptions options = RegexOptions.IgnorePatternWhitespace;

foreach (Match match in Regex.Matches(input, pattern, options)) { ...

如果您计划多次使用该模式,则最好一劳永逸地进行编译。请注意,您可以改用以下变体来减少正则表达式引擎的工作:

string pattern = @"
  \G(?!\A) \[
  (?<type> [^],]+ )
  [^]]* ] (?: , | ]\z )
|
  \A
  (?<main> [^`]+ ) 
  (?:
      ` (?<number> [0-9]+ )
      \[{2}
      (?<type> [^],]+ )
      [^]]* ]
      (?: , | ]\z )
    |
      \z
  )";

如果要确保已到达字符串的末尾,则可以替换]\z(?<endcheck>]\z)并控制该组是否存在于最后一个匹配项中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获得使用正则表达式嵌套在另一个组中的重复组?

来自分类Dev

如何编写未嵌套在另一个模式中的正则表达式模式

来自分类Dev

如何使用正则表达式获得重复组?

来自分类Dev

用正则表达式捕获一个或另一个组

来自分类Dev

如果后面有另一个组,如何在正则表达式中不捕获该组

来自分类Dev

如何调用嵌套在另一个函数中的函数表达式?

来自分类Dev

正则表达式:将组放入另一个组中。这些组具有相同的字符

来自分类Dev

如何重复一个正则表达式组直到字符串结尾

来自分类Dev

如何在一个正则表达式中捕获所有正则表达式组?

来自分类Dev

正则表达式中的嵌套/重复组

来自分类Dev

如何将正则表达式组捕获集合与另一个组捕获集合进行匹配?

来自分类Dev

如何在递归正则表达式中匹配一个组?

来自分类Dev

如何在同一个正则表达式中使用捕获的组

来自分类Dev

特定字词后加句号,再由另一个正则表达式组

来自分类Dev

正则表达式-匹配字符串不包含一个组,不包含另一个组

来自分类Dev

匹配直到正则表达式中的另一个表达式

来自分类Dev

在另一个正则表达式中找不到正则表达式

来自分类Dev

正则表达式对另一个正则表达式的匹配结果使用条件

来自分类Dev

如何正则表达式包含“。*”的“零或一个”组

来自分类Dev

正则表达式(.NET):如何在中间找到一个组

来自分类Dev

在同一个正则表达式中可能引用先前的组?

来自分类Dev

正则表达式:跳过组中角色的第一个匹配项?

来自分类Dev

正则表达式与重复组

来自分类Dev

正则表达式重复组

来自分类Dev

如何使用正则表达式将Java中的最后一个字母替换为另一个字母

来自分类Dev

如何获得正则表达式捕获组的价值?

来自分类Dev

正则表达式:如何重复组区域?

来自分类Dev

在Scala中获取重复的正则表达式组

来自分类Dev

在Scala中获取重复的正则表达式组

Related 相关文章

  1. 1

    如何获得使用正则表达式嵌套在另一个组中的重复组?

  2. 2

    如何编写未嵌套在另一个模式中的正则表达式模式

  3. 3

    如何使用正则表达式获得重复组?

  4. 4

    用正则表达式捕获一个或另一个组

  5. 5

    如果后面有另一个组,如何在正则表达式中不捕获该组

  6. 6

    如何调用嵌套在另一个函数中的函数表达式?

  7. 7

    正则表达式:将组放入另一个组中。这些组具有相同的字符

  8. 8

    如何重复一个正则表达式组直到字符串结尾

  9. 9

    如何在一个正则表达式中捕获所有正则表达式组?

  10. 10

    正则表达式中的嵌套/重复组

  11. 11

    如何将正则表达式组捕获集合与另一个组捕获集合进行匹配?

  12. 12

    如何在递归正则表达式中匹配一个组?

  13. 13

    如何在同一个正则表达式中使用捕获的组

  14. 14

    特定字词后加句号,再由另一个正则表达式组

  15. 15

    正则表达式-匹配字符串不包含一个组,不包含另一个组

  16. 16

    匹配直到正则表达式中的另一个表达式

  17. 17

    在另一个正则表达式中找不到正则表达式

  18. 18

    正则表达式对另一个正则表达式的匹配结果使用条件

  19. 19

    如何正则表达式包含“。*”的“零或一个”组

  20. 20

    正则表达式(.NET):如何在中间找到一个组

  21. 21

    在同一个正则表达式中可能引用先前的组?

  22. 22

    正则表达式:跳过组中角色的第一个匹配项?

  23. 23

    正则表达式与重复组

  24. 24

    正则表达式重复组

  25. 25

    如何使用正则表达式将Java中的最后一个字母替换为另一个字母

  26. 26

    如何获得正则表达式捕获组的价值?

  27. 27

    正则表达式:如何重复组区域?

  28. 28

    在Scala中获取重复的正则表达式组

  29. 29

    在Scala中获取重复的正则表达式组

热门标签

归档