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 条评论
登录 后参与评论

相关文章

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

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

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

正则表达式以匹配不在嵌套块中的括号或大括号内的管道

PHP正则表达式检测括号内的文本,忽略嵌套括号

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

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

正则表达式匹配方括号内的字符串,用冒号分隔

正则表达式匹配点后括号内的管道分隔字符串

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

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

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

正则表达式在方括号外匹配文本

正则表达式匹配文本,后跟大括号

正则表达式匹配括号内的所有内容忽略嵌套

用于删除带括号的文本的正则表达式

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

正则表达式提取嵌套括号内的单词

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

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

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

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

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

正则表达式用于括号内的特殊字符

正则表达式用于删除括号内的逗号

如何使用正则表达式匹配括号内的文本?

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

正则表达式,用于匹配字符串分隔符内的任何字符

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