带()&;|~的布尔表达式的正则表达式作为不同位置的运算符和分组器标识符

本文关键字:位置 运算符 标识符 正则表达式 amp 布尔表达式 | 更新日期: 2023-09-27 18:21:04

我找不到任何涉及我的特定问题的例子。我使用的是.NET c#regex库。我必须解析一个遗留文件结构,该结构使用具有自己格式的长布尔表达式。我现在需要用其他文本替换特定的标识符编号,我无法进行匹配。

例如,在以下类型的情况下,我需要匹配数字1。"1"|"1&2"|"2|1"|"3&(1|2)"|"(3|1)&2"

但不匹配于:"11"|"2&11"|"11|3"

此外,我更愿意将其与确切的数字匹配,而不是任何额外的空格或参数。我希望它可以用一种表达方式来表达。我已经到了只能用多个表达式和正则表达式替换的地步。有大师知道怎么做吗?

带()&;|~的布尔表达式的正则表达式作为不同位置的运算符和分组器标识符

下面的正则表达式使用lookahead和lookbacking,应该可以为您的示例执行此操作。

//regex expression (the important part)
var regex = new Regex(@"(?<!'d)1(?!'d)");
//test input
var input1 = "'"1'" '"1 & 2'" '"2 | 1'" '"3 & (1 | 2)'" '"3( | 1) & 2'"";
var input2 = "'"11'" '"2 & 11'" '"11 | 3'"";
//replace and print result
Console.WriteLine(regex.Replace(input1, "NEW"));
Console.WriteLine(regex.Replace(input2, "NEW"));
// Output:
// "NEW" "NEW & 2" "2 | NEW" "3 & (NEW | 2)" "3( | NEW) & 2"
// "11" "2 & 11" "11 | 3"

这本质上意味着"捕获所有不直接在数字前面或后面的1"。

有关lookahead/lookbacking断言的更多信息,请查看此页面:http://www.regular-expressions.info/lookaround.html

要单独匹配"1",而不是作为另一个值的一部分,您可以使用以下方法:

var regex = new Regex(@"'b1'b");

单词边界上匹配前后的"''b"(从单词到非单词字符的转换,反之亦然)。根据您的示例,以上内容将起作用。