C#正则表达式,用于匹配嵌套括号内的分隔文本

埃敏·伊尔迪兹(M. Emin Yildiz)

我将这些代码行用于括号之间的运算符:

string filtered = Regex.Replace(input, "\\(.*?\\)", string.Empty);
var result = filtered.Split(new[] { ' ' }, 
            StringSplitOptions.RemoveEmptyEntries)
            .Where(element => element == "OR" || element == "AND");    
string temp = string.Join(" ", result);

这些行不适用于嵌套括号。

例如; 它适用于此输入

X1 OR ( X2 AND X3 AND X4 AND X5 ) OR X6

它给我这个结果:OR OR

但是,当我的输入中有多个嵌套括号时,它的工作方式将是错误的。

对于此输入:

X1 OR ( X2 AND( X3 AND X4 ) AND X5 ) OR X6

我想获取结果OR OR,但它显示OR AND OR

尽管(字符串中有两个字符,但是在匹配第一个)字符后结束处理

如何调整我的正则表达式模式?

威克多·斯特里比尤(WiktorStribiżew)

您的\(.*?\)正则表达式包含3个部分:1)\(匹配文字(,2).*? 惰性点匹配模式(与0+匹配除换行符以外的任何字符,最少匹配到第一个 ),以及3)\)匹配文字)

如果您的字符串不能转义序列,请使用平衡构造

@"\((?>[^()]|(?<o>)\(|(?<-o>)\))*\)(?(o)(?!))"

这里的要点是,表达式不应包含任何锚点(如“什么是正则表达式Balancing Groups”)。

详细资料

  • \( -文字 (
  • (?> -开始原子组以防止回溯到原子组中
    • [^()]-除(以外的任何字符)
    • | - 或者
    • (?<o>)\(-匹配文字(并将空值推入堆栈“ o”
    • | - 或者
    • (?<-o>)\)-匹配文字)并从堆栈“ o”中删除一个值
  • )* -匹配零次或多次出现的原子团
  • \) -文字 )
  • (?(o)(?!)) -如果堆栈“ o”包含值(不为空),则条件构造将导致匹配失败。

请参阅regex演示

var input = "X1 OR ( X2 AND( X3 AND X4 ) AND X5 ) OR X6";
var filtered = Regex.Replace(input, @"\((?>[^()]|(?<o>)\(|(?<-o>)\))*\)(?(o)(?!))", string.Empty);
var result = filtered.Split(new[] { ' ' }, 
    StringSplitOptions.RemoveEmptyEntries)
    .Where(element => element == "OR" || element == "AND");    
var temp = string.Join(" ", result);

参见C#演示

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#正则表达式,用于匹配嵌套括号内的分隔文本

来自分类Dev

正则表达式以匹配简单的括号(C#)

来自分类Dev

正则表达式:按括号分隔,忽略引号内的嵌套括号

来自分类Dev

正则表达式:按括号分隔,忽略引号内的嵌套括号

来自分类Dev

什么正则表达式可以将括号中的文本与嵌套括号匹配

来自分类Dev

正则表达式,用于匹配文本,后跟文本,直到匹配的括号(匹配的左括号)为止

来自分类Dev

正则表达式匹配括号内的数字,以逗号分隔

来自分类Dev

正则表达式匹配双花括号嵌套

来自分类Dev

Ruby-用于匹配括号的正则表达式?

来自分类Dev

正则表达式用于Python中的匹配括号

来自分类Dev

正则表达式在嵌套括号之间查找文本

来自分类Dev

正则表达式匹配多行括号中的文本

来自分类Dev

正则表达式用于在嵌套括号内获取值

来自分类Dev

(C#正则表达式)如何使用正则表达式使单词边界适用于括号?

来自分类Dev

正则表达式在括号内的匹配

来自分类Dev

正则表达式匹配括号内的任何字符

来自分类Dev

正则表达式,匹配大括号内的值

来自分类Dev

正则表达式-获取匹配括号内的内容

来自分类Dev

正则表达式匹配括号内的数值

来自分类Dev

正则表达式匹配括号内的字母

来自分类Dev

正则表达式匹配大括号内的内容,而嵌套大括号不会破坏大括号

来自分类Dev

正则表达式-匹配括号内引号中的文本

来自分类Dev

大括号内的文本正则表达式

来自分类Dev

正则表达式删除不在括号内的文本

来自分类Dev

正则表达式:在分隔符内匹配文本

来自分类Dev

C#正则表达式按多个右括号分隔

来自分类Dev

嵌套正则表达式用于域匹配

来自分类Dev

嵌套正则表达式用于域匹配

来自分类Dev

正则表达式嵌套括号

Related 相关文章

  1. 1

    C#正则表达式,用于匹配嵌套括号内的分隔文本

  2. 2

    正则表达式以匹配简单的括号(C#)

  3. 3

    正则表达式:按括号分隔,忽略引号内的嵌套括号

  4. 4

    正则表达式:按括号分隔,忽略引号内的嵌套括号

  5. 5

    什么正则表达式可以将括号中的文本与嵌套括号匹配

  6. 6

    正则表达式,用于匹配文本,后跟文本,直到匹配的括号(匹配的左括号)为止

  7. 7

    正则表达式匹配括号内的数字,以逗号分隔

  8. 8

    正则表达式匹配双花括号嵌套

  9. 9

    Ruby-用于匹配括号的正则表达式?

  10. 10

    正则表达式用于Python中的匹配括号

  11. 11

    正则表达式在嵌套括号之间查找文本

  12. 12

    正则表达式匹配多行括号中的文本

  13. 13

    正则表达式用于在嵌套括号内获取值

  14. 14

    (C#正则表达式)如何使用正则表达式使单词边界适用于括号?

  15. 15

    正则表达式在括号内的匹配

  16. 16

    正则表达式匹配括号内的任何字符

  17. 17

    正则表达式,匹配大括号内的值

  18. 18

    正则表达式-获取匹配括号内的内容

  19. 19

    正则表达式匹配括号内的数值

  20. 20

    正则表达式匹配括号内的字母

  21. 21

    正则表达式匹配大括号内的内容,而嵌套大括号不会破坏大括号

  22. 22

    正则表达式-匹配括号内引号中的文本

  23. 23

    大括号内的文本正则表达式

  24. 24

    正则表达式删除不在括号内的文本

  25. 25

    正则表达式:在分隔符内匹配文本

  26. 26

    C#正则表达式按多个右括号分隔

  27. 27

    嵌套正则表达式用于域匹配

  28. 28

    嵌套正则表达式用于域匹配

  29. 29

    正则表达式嵌套括号

热门标签

归档