Regex:目标和部分替换

本文关键字:替换 目标 Regex | 更新日期: 2023-09-27 18:11:38

我正在尝试删除字符串中某些字符之间的空格:

element 1  : 200  :2   1 2 3 4    - 30        node 1:39

element 1:200:2   1 2 3 4    -30        node 1:39

删除的空格在数字和包含:之间或-和数字之间。到目前为止,我已经得到了这个针对数字之间的空间并包含:-的正则表达式。

Regex mySpace = new Regex(@"'W+ (:|-) +");

接下来我要做的是删除这些匹配中的空格。我怎么能这么做呢?也许用一些更复杂的正则表达式,直接匹配所需的空格,然后将它们替换为空字符串?

Regex:目标和部分替换

下面的正则表达式将完全匹配由:-之后的空格分隔的数字之间的空格,直到第一个数字。只需将匹配的空格替换为空字符串。

(?<='d)'s*(?=:)|(?<=:)'s+|(?<=-)'s+(?='d)

演示

你的c#代码应该是,

string pattern = @"(?<='d)'s*(?=:)|(?<=:)'s+|(?<=-)'s+(?='d)";
string test = Regex.Replace("element 1 : 200 :2 1 2 3 4 - 30        node 1:39", pattern, "");
Console.WriteLine(test);
Console.ReadLine();
输出:

element 1:200:2   1 2 3 4    -30        node 1:39

IDEONE

解释:

  • (?<='d)'s*(?=:)匹配数字后后跟:
  • 的空格
  • |逻辑或运算符
  • (?<=:)'s+匹配:
  • 后面的一个或多个空格
  • |逻辑或运算符
  • (?<=-)'s+(?='d)将后面的一个或多个空格匹配到后跟数字的-

如果你想使用你自己的正则表达式,你可以在替换部分使用组。正则表达式捕获组中的冒号或破折号,就像在括号中一样。因此,您可以使用$1:

将匹配仅替换为组(从而删除空白)。
Regex mySpace = new Regex(@"'W+ (:|-) +");
mySpace.Replace(yourtext, "$1")

(如果您有多个组,您可以使用$1,$2等)

Avinash Raj的答案更复杂,但也许这对你之后阅读更容易。