【问题标题】:C# regular expression (replace)C#正则表达式(替换)
【发布时间】:2011-02-23 12:42:50
【问题描述】:

假设我有字符串:

10,11,12,13,14,ABC,DEF,GHI,66

我希望对其运行正则表达式以仅返回 0-9 和“,”字符,基本上去除了其他任何内容。

我查看了 Regex.Replace,但有些地方不太对劲。我的代码如下:

Regex reg = new Regex(@"[0-9,]+");
string input = reg.Replace(input, delegate(Match m)
                {
                    return String.Empty;
                });

我怎样才能做到这一点?

【问题讨论】:

  • “有些地方不太对劲”——比如什么?
  • 我也建议string input = reg.Replace(input, "");(或者String.Empty,如果你更喜欢它)。很好奇您在简单的字符串替换之前发现了回调变体......
  • 你已经展示了一个假设的字符串开始,但是你能展示你想要的结果吗?例如:你希望它是10,11,12,13,14,66 所以删除ABC,DEF,GHI,

标签: c# regex


【解决方案1】:

你只是想要一个^吗?

input = Regex.Replace(input, @"[^0-9,]+", "");

【讨论】:

  • 也许他想删除已删除子串的逗号... AB,CD,12,EF,GH => 12,(甚至可能是12)
  • @xanatos - 所以改为@"([^0-9,]+,)"。哦,一定喜欢正则表达式语法。
  • @xanatos - 属于疯狂猜测类别,但您可以在下一步修剪多余的逗号。
  • @Michael - 根据当前代码,数字和字母可能混合在一起:a12v3,7y8z -> 123,78。如果不是,它会简单得多 - 您可以为所有 [0-9]+ 进行凹坑匹配。此外,您的正则表达式需要一个逗号,它不适用于最后一个单词(尽管那个很简单)。
  • 谢谢你成功了 - 我之前也试过 ^[0-9,]。非常感谢
【解决方案2】:

匹配集合会给您更多控制权吗?

使用\d+[^,]可以得到数字的集合?

然后您可以遍历您的集合并重新创建您想要的字符串。

使用 linq 您可以执行以下操作:

var input = "10,11,12,13,14,ABC,DEF,GHI,66";
Regex re = new Regex(@"\d+[^,]");
input = (from Match m in re.Matches(input) select m.Value).Aggregate("", (acc, item) => acc + "," + item).TrimStart(',');

【讨论】:

  • 如果您只想要字母,可以将 \d+ 替换为 [A-Za-z]+
【解决方案3】:

这个怎么样:

var testString = "10,11,12,13,14,ABC,DEF,GHI,66";
var split = testString.Split(',');
var result = String.Join(",", split.Where(element => element.All(c => Char.IsDigit(c))).ToArray());

【讨论】:

    【解决方案4】:

    我认为您可以通过分析集合[0123456789,] 中的角色所需的内容,在不使用正则表达式的情况下做到这一点。

    【讨论】:

      猜你喜欢
      • 2011-03-21
      • 2022-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      相关资源
      最近更新 更多