【问题标题】:Regex to extract numeric string正则表达式提取数字字符串
【发布时间】:2011-12-05 22:40:21
【问题描述】:

您好,我对正则表达式感觉不太好。 我想要实现的是从输入字符串中提取一个数字子字符串(只有 0-9 位)。

  • 搜索的数字字符串前面只能有一个 分号 (;)、空格 ( ) 或应准确放在开头 输入(不是线)。
  • 搜索的数字字符串后面只能跟一个分号 (;)、行尾或输入字符串的结尾。

示例输入:

;x; ;SrvId=3993;ad257c823; 435223;

输出:

435223

我试过:[ \A|;|[ ]]\d*[\r|;|\Z],但没有成功,甚至没有编译。

【问题讨论】:

    标签: c# .net regex


    【解决方案1】:

    试试这个:

    string resultString = null;
    try {
        resultString = Regex.Match(subjectString, @"(?<=\A|\s+|;)(\d+)(?=$|;|\Z)").Groups[1].Value;
    } catch (ArgumentException ex) {
        // Syntax error in the regular expression
    }
    

    分解:

    (?

    正向后视:输入的开头或至少一个空白字符或分号。

    (\d+) 至少一位数

    (?=$|;|\Z)

    行尾、分号或输入的正向前瞻。

    输入:;x; ;SrvId=3993;ad257c823; 435223;

    第 1 组的输出:435223

    【讨论】:

    • @HasanKhan 你能提供一个输入,让它匹配不应该匹配的地方吗?
    • @FailedDev 当新行中有更多文本时,它与行尾的数字不匹配
    • @HasanKhan 我在 OP 示例中看不到任何新行。你呢?
    • @FailedDev "搜索的数字字符串后面只能跟一个分号 (;)、行尾或输入字符串的结尾。"跨度>
    • @HasanKhan 你可以写任何你想要的粗体字母,但这仍然不能改变 OPs 帖子中没有新行的事实 :) 另外,如果我的英语没有欺骗我行尾应该是字符串的最后一部分。 OP没有提到多条新线的可能性。所以你错了 - 再次:D
    【解决方案2】:

    试试这个正则表达式:

    ^(?:[; ]?)(?:.*?)([0-9]+);$
    

    【讨论】:

      【解决方案3】:

      使用^.*[ ;](\d+)[;\n]?$ 将捕获您感兴趣的数字,但您可能需要根据输入文件的行尾将\n 更改为\r\n。

      【讨论】:

        【解决方案4】:

        正则表达式应该是这样的:

        "[; ]{1}[0-9]+($|[^0-9]+)"
        

        【讨论】:

        • 返回 435223;其中包括分号
        【解决方案5】:

        尝试使用这个表达式

        (\d+\.?\d*|\.\d+)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-25
          • 1970-01-01
          • 2023-03-22
          • 2011-05-10
          • 1970-01-01
          • 2016-01-02
          相关资源
          最近更新 更多