【问题标题】:parse value from given string using Regex [duplicate]使用正则表达式解析给定字符串中的值[重复]
【发布时间】:2016-09-02 11:39:06
【问题描述】:

我有这个string

String str = "Displaying bills 1 - 20 of 10000 in total";

我想解析总值,在这种情况下是10000。 这是我尝试过的:

Regex regex = new Regex(@"\\d+(?=\\s*in total)");
Match match = regex.Match("Displaying bills 1 - 20 of 10000 in total");
if (match.Success)
{
    Console.WriteLine(match.Value);
} 

目前这已经成功了。

【问题讨论】:

  • 不要在逐字字符串中分隔反斜杠。所以使用@"\d+(?=\s*in total)""\\d+(?=\\s*in total)"(没有@)。
  • 是的,@"\" 表示 1 个文字反斜杠,在 d 之前有 2 个,匹配文本中的 \d。当您删除 @ 并使字符串文字成为常规字符串时,"\\" 将被解析为正则表达式引擎将 \d 解析为数字速记字符类所必需的 1 个文字反斜杠。

标签: c# regex


【解决方案1】:
        string text = "Displaying bills 1 - 20 of 10000 in total";
        Regex r = new Regex(Regex.Escape("of") +"(.*?)"+Regex.Escape("in"));
        MatchCollection matches = r.Matches(text);
        MessageBox.Show(matches[0].Groups[1].Value);

【讨论】:

  • 为什么要转义不包含任何需要转义的字符串文字?
【解决方案2】:

正如@juharr 在评论中提到的,您只需要删除双反斜杠即可。字符串开头的@ 将其标记为逐字字符串,不需要对特殊字符进行转义。

【讨论】:

  • 唯一的问题是分隔的反斜杠,因为 OP 只想匹配“总计”之前的数字。你的将匹配整个字符串。
  • 你是对的。出于某种原因,我认为他是从 match.groups[1] 获取值,这需要对数字进行分组。我会编辑。
猜你喜欢
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多