我有一个自定义C#应用程序(.NET 4.7.1),它需要评估各种文本字符串。作为许多情况之一,我在其他文字中间有以下字符串:
OR S:D00Q0600 ) OR
我需要找到这些精确的情况(每个字符串段将被单个空格包围,或者位于行的开头或结尾),其中有一个OR
,后跟一个包含{ {1}},然后是:
,然后是另一个)
。 OR
是文字,而字符串中的ORs
是文字,而:
是文字–但是)
是可变的,并且每次都不同。>
当发生这种情况时,我需要将字符串替换为:
D00Q0600
(仅从该小片段中删除OR S:D00Q0600 OR
-而不是整个字符串)
因此,将其分解得更干净一点:
)
(总是大写)OR
的字符串:
)
OR
移到该位置)
)
是正确的,必须保留;仅在上述情况下才应将其删除。S:D00Q0600的长度可以可变。也可以是(例如)S:D00Q或S:D00Q0600XYZ,等等。
我正在努力构造可以解决此问题的C#正则表达式。预先感谢。
答案 0 :(得分:1)
您可以使用此正则表达式并用与组1和组2匹配的正则表达式进行替换。这样可以确保仅在此正则表达式匹配时才进行替换。
(OR [A-Z]:[A-Z0-9]+ )\) (OR)
在这里检查
https://regex101.com/r/0EZiu6/1/
编辑1:
修改了您的c#代码,现在可以使用了。
string pattern = @"(OR [A-Z]:[A-Z0-9]+ )\) (OR)";
string substitution = @"$1$2";
string input = @"OR S:D00Q0600 ) OR ok sir how )r u OR S:D11Q06 ) OR i ()am fine OR D:D67Q06S0A23DR ) OR";
RegexOptions options = RegexOptions.Multiline;
Regex regex = new Regex(pattern, options);
string result = regex.Replace(input, substitution);
Console.WriteLine("Before Replace: " + input);
Console.WriteLine("After Replace: " + result);
我刚刚用$ 1 $ 2替换了\ 1 \ 2,并在最后添加了print语句,以在替换前后打印结果。
以下是该程序的输出,完全符合您的要求。
Before Replace: OR S:D00Q0600 ) OR ok sir how )r u OR S:D11Q06 ) OR i ()am fine OR D:D67Q06S0A23DR ) OR
After Replace: OR S:D00Q0600 OR ok sir how )r u OR S:D11Q06 OR i ()am fine OR D:D67Q06S0A23DR OR
答案 1 :(得分:0)
对于单个示例
OR S:D00Q0600 ) OR
...此正则表达式有效:
(\bOR S:........ )\)( OR\b)
替换组为$1
和$2
。
正则表达式假定中间字符串的长度始终为七个字符。如果您输入的数据更多/不同,请使用此正则表达式失败的示例来更新您的问题。
(\bOR S:........ )\)( OR\b)
\b
在单词边界处声明位置(从非单词到单词或从单词到非单词的过渡)
OR S:
从字面上匹配字符(区分大小写)
.
匹配任何字符(行终止符除外)
从字面上匹配字符(区分大小写)
\)
从字面上匹配字符)
(区分大小写)