代码之家  ›  专栏  ›  技术社区  ›  flavour404

正则表达式检索()中封装的字符串的一部分

  •  0
  • flavour404  · 技术社区  · 14 年前

    我只想检索一个字符串的两个子字符串,其形式如下。第一个是一个数字值(只有一个),它被括在括号中,比如(12345)-这可以是任意数量的数字(我没有真正保留任何长度统计),但是1到10个数字应该包含它。第二个子串的形式是$some numerical value+$second numerical value,比如($100+$5),那么我又该怎么拉呢?我在谷歌上搜索了一些可能的解决方案,但不幸地失败了,所以一个小小的解释可能会帮助我学到一些东西。。。

    我忘了提到数值可以是$100+$5.20或$10+$0.20,也可以是$0.05/$0.10。

    谢谢。

    4 回复  |  直到 14 年前
        1
  •  0
  •   Toto    14 年前

    如果您只想用一个正则表达式检索两个子字符串,您可以根据两个子字符串在原始字符串中的顺序执行以下操作:

    input = "bla bla (12345) bla bla ($123 + $456) bla bla"
    
    \((\d+)\).*?\(\$(\d+)\s*\+\s*\$(\d+)\)
    

    input = "bla bla ($123 + $456) bla bla (12345) bla bla"
    
    \(\$(\d+)\s*\+\s*\$(\d+)\).*?\((\d+)\)
    

    \d+ 通过 \d{1,10}

    如果你想用可选的小数部分来匹配数字,你必须改变 \d级+ 通过 \d+(?:\.\d\d)? 然后正则表达式变成:

    \((\d+(?:\.\d\d)?)\).*?\(\$(\d+(?:\.\d\d)?)\s*\+\s*\$(\d+(?:\.\d\d)?)\)
    
        2
  •  1
  •   Timwi    14 年前

    要查找括号中的数字:

    var input = "Blah (12345) blah";
    var m = Regex.Match(input, @"\((\d+)\)");
    if (m.Success)
        // Outputs 12345
        Console.WriteLine(m.Groups[1].Value);
    

    对于美元+数字表达式:

    var input = "Blah ($100 + $5) blah";
    var m = Regex.Match(input, @"\(\$(\d+)\s*\+\s*\$(\d+)\)");
    if (m.Success)
    {
        // Outputs 100
        Console.WriteLine(m.Groups[1].Value);
        // Outputs 5
        Console.WriteLine(m.Groups[2].Value);
    }
    
        3
  •  0
  •   Bernd    14 年前

    (?<Group1>\(\d+\))|(?<Group2>\(\$\d+\s*\+\s*\$\d+\))
    

    它在要匹配的两个组之间使用“or”。因此,它们在输入中出现的顺序和频率并不重要。每次“or”条件的某个部分匹配时,您将在生成的匹配集合中获得正则表达式匹配。名称“Group1”和“Group2”使您可以更方便地访问匹配的内容:匹配。组[“Group1”].Value例如

        4
  •  -1
  •   Colin Hebert    14 年前

    /\((\d+)\)/ 对于第一个子串
    /\((\$\d+(?:\s*\+\s*\$\d+)*)\)/

    对于第一个子串,我实际上只看“(”和“)”之间的数字。

    它也会匹配 ($12 +$30+ $13 + $14)

    另一种方法是, /\((\$\d+ \+ \$\d+)\)/


    一个简单的警告,我在正则表达式中使用了“/”分隔符,您必须删除它们才能在C中使用正则表达式#