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+ (:|-) +");
接下来我要做的是删除这些匹配中的空格。我怎么能这么做呢?也许用一些更复杂的正则表达式,直接匹配所需的空格,然后将它们替换为空字符串?
下面的正则表达式将完全匹配由:
或-
之后的空格分隔的数字之间的空格,直到第一个数字。只需将匹配的空格替换为空字符串。
(?<='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的答案更复杂,但也许这对你之后阅读更容易。