【问题标题】:C# - Search for digits in string with RegexC# - 使用正则表达式搜索字符串中的数字
【发布时间】:2012-12-12 10:09:20
【问题描述】:

我想从字符串中提取数字,格式如下:

string foo="something%4%something2%5%";

我如何用正则表达式写这个?

//pseudocode
foo.GetDigits("%"+{int}+"%").ToArray();

谢谢!

【问题讨论】:

标签: c# regex int


【解决方案1】:
var matches = Regex.Matches(foo, @"%(\d+?)%").Cast<Match>()
                   .Select(m => m.Groups[1].Value)
                   .ToList();

【讨论】:

  • 这将无法捕获2,因为它前面没有%。话虽如此,从2 是否应该被提取的问题中还不清楚......
  • @Oded GetDigits("%"+{int}+"%") 让我觉得它必须在两个%s 之间
  • 我怀疑 something2 只是……第二个东西。值的不幸命名。 =)
  • NB 我认为这里不需要懒惰的东西 (?),因为 \d 不会与 % 重叠。
【解决方案2】:

您可以使用char.IsDigit 方法代替正则表达式来获取字符串中的所有数字。

string str = "something%4%something2%5%";
string digitstr = new string(str.Where(r => char.IsDigit(r)).ToArray());

或更短:

string digitstr = new string(str.Where(char.IsDigit).ToArray());

【讨论】:

  • 如果投反对票的人能解释答案有什么问题,那就太好了?
  • 在没有建设性批评的情况下让 dvs 感到痛苦。前几天发生在我身上......不过,答案很好,+1。
  • 可能是因为您没有提供正则表达式。不过,我更喜欢这种解决方案,因为所发生的事情非常清楚。不是绝对一切都应该或可以用正则表达式完成。
  • 这会丢失有关哪些数字是连续的任何信息,尽管从问题中不清楚 OP 是否关心。
  • @Rawling,你所说的连续是指str= "2222aaa222"; 吗?
【解决方案3】:

你也可以使用这个模式:

(\d+)(?=%)

这是一个示例代码:(未经测试)

MatchCollection mcol = System.Text.RegularExpression.Regex.Matches(foo,"(\d+)(?=%)");

foreach (Match m in mcol)
{
   System.Diagnostic.Debug.Print(m.ToString());
}

此模式将捕获所有数字,后跟%

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-17
    • 2013-11-24
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    相关资源
    最近更新 更多