C#正则表达式搜索并替换空格包围的所有整数

时间:2014-02-08 20:51:24

标签: c# regex

如果这是一个重复的问题,我道歉。我没有找到解决方案。

我想搜索空格包围的所有整数,并用空格替换它们。

StringBuilder sb = new StringBuilder(" 123 123 456 789 fdsa jkl xyz x5x 456 456 123 123");
StringBuilder sbDigits = new StringBuilder(Regex.Replace(sb.ToString()), @"\s[0-9]+\s", " ", RegexOptions.Compiled);

sbDigits返回值是,“123 789 fdsa jkl xyz x5x 456 123”

我希望返回值为“fdsa jkl xyz x5x”

那么,发生了什么?我如何确保获得重复的号码?

7 个答案:

答案 0 :(得分:0)

String fixed = Regex.Replace(originalString, "\\s*\\d+\\s+", "");

答案 1 :(得分:0)

尝试以下正则表达式:Regular expression visualization

StringBuilder sb = new StringBuilder(" 123 123 456 789 fdsa jkl xyz x5x 456 456 123 123");
StringBuilder sbDigits = new StringBuilder(Regex.Replace(sb.ToString(), @"\s*[0-9]+\d\s*", " ", RegexOptions.Compiled));

Regex demo

答案 2 :(得分:0)

您可以使用:

search:  @"( [0-9]+)(?=\1\b)"
replace: ""

答案 3 :(得分:0)

这个怎么样:

测试字符串:

 123 123 456 789 fdsa jkl xyz x5x 456 456 123 123 5x

正则表达式:

(?<=\s|^)[\d]+(?=\s|$)

工作示例:

http://regex101.com/r/tJ5rA6

C#:

StringBuilder sb = new StringBuilder(" 123 123 456 789 fdsa jkl xyz x5x 456 456 123 123 5x");
StringBuilder sbDigits = new StringBuilder(Regex.Replace(sb.ToString()), @"(?<=\s|^)[\d]+(?=\s|$)", " ", RegexOptions.Compiled);

返回值:

fdsa jkl xyz x5x 5x

答案 4 :(得分:0)

如果添加分词符(\b),则只能捕获“数字单词”(这听起来像你想要的那样。并且你可以捕获数字周围的零个或多个空格而不匹配字母内的数字:

\s*\b\d+\b\s*

答案 5 :(得分:0)

我对Regex不太了解。但是可以用一点LINQ来完成:

var str = "123 789 fdsa jkl xyz x5x 456 123";
var parts = str.Split().Where(x => !x.All(char.IsDigit));
var result = string.Join(" ", parts); //  fdsa jkl xyz x5x

答案 6 :(得分:0)

什么是hapenned

看看当你应用你的正则表达式时会发生什么,它与空格,任意数量的数字和另一个空格相匹配:

"( 123 )123 456 789 fdsa jkl xyz x5x 456 456 123 123"
// regex engine matches " 123 ", first fitting pattern
"( 123 )123( 456 )789 fdsa jkl xyz x5x 456 456 123 123"
// regex engine matches " 456 ", because the first match "ate" the whitespace
"( 123 )123( 456 )789 fdsa jkl xyz x5x( 456 )456 123 123"
// matches the first " 456 "
"( 123 )123( 456 )789 fdsa jkl xyz x5x( 456 )456( 123 )123"
// matches " 123 "
"( 123 )123( 456 )789 fdsa jkl xyz x5x( 456 )456( 123 )123"

因此,正则表达式只找到" 123 "" 456 "" 456 "" 123 "。你用空白替换了这些匹配,这就是导致输出的原因。

你想做什么

您希望将单词边界与不会“吃掉”单词边界(此处为空白)的内容进行匹配。正如许多其他人所建议的那样,

\b\d+\b

会做到这一点。