正则表达式:目标和部分替换

时间:2014-07-05 15:15:13

标签: c# regex replace

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

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+ (:|-) +");

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

2 个答案:

答案 0 :(得分:1)

以下正则表达式将完全匹配由:分隔的数字之间的空格或-之后的空格与第一个数字之间的空格。只需用空字符串替换匹配的空格。

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

DEMO

您的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*(?=:)匹配后跟:
  • 的数字后面的空格
  • |逻辑OR运算符。
  • (?<=:)\s+匹配:
  • 之后的一个或多个空格
  • |逻辑OR运算符。
  • (?<=-)\s+(?=\d)将一个或多个空格与-后跟一个数字匹配。

答案 1 :(得分:1)

如果要使用自己的正则表达式,可以在替换部分中使用组。你的正则表达式捕获结肠或短划线,因为它是一个parentese。 因此,您可以使用$ 1替换匹配(从而删除空格):$ 1:

Regex mySpace = new Regex(@"\W+ (:|-) +");
mySpace.Replace(yourtext, "$1")

(如果你有几个小组,你可以使用1美元,2美元等)

Avinash Raj的答案更为复杂,但也许您以后更容易阅读。