文字与包含文字的变量混合在一起的正则表达式是什么?

时间:2018-10-12 16:46:08

标签: c# regex

我有一个自定义C#应用程序(.NET 4.7.1),它需要评估各种文本字符串。作为许多情况之一,我在其他文字中间有以下字符串:

OR S:D00Q0600 ) OR

我需要找到这些精确的情况(每个字符串段将被单个空格包围,或者位于行的开头或结尾),其中有一个OR,后跟一个包含{ {1}},然后是:,然后是另一个)OR是文字,而字符串中的ORs是文字,而:是文字–但是)是可变的,并且每次都不同。

当发生这种情况时,我需要将字符串替换为:

D00Q0600

(仅从该小片段中删除OR S:D00Q0600 OR -而不是整个字符串)

因此,将其分解得更干净一点:

  1. 找到一个)(总是大写)
  2. ...之后是一个空格,后跟一个带有OR的字符串
  3. ...后跟一个空格,后跟一个:
  4. ...之后跟一个空格,后跟一个)
  5. 找到后,将OR移到该位置
  6. 请勿删除整个字符串中经常存在的其他)
  7. 在许多情况下,)是正确的,必须保留;仅在上述情况下才应将其删除。

S:D00Q0600的长度可以可变。也可以是(例如)S:D00Q或S:D00Q0600XYZ,等等。

我正在努力构造可以解决此问题的C#正则表达式。预先感谢。

2 个答案:

答案 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:从字面上匹配字符(区分大小写)

.匹配任何字符(行终止符除外)

从字面上匹配字符(区分大小写)

\)从字面上匹配字符)(区分大小写)

Regex101