【问题标题】:Problem matching regex pattern in AndroidAndroid中匹配正则表达式模式的问题
【发布时间】:2011-03-09 22:45:11
【问题描述】:

我正在尝试搜索这个字符串:

,"tt" : "ABC","r" : "+725.00","a" : "55.30",

为:

"r" : "725.00"

这是我当前的代码:

Pattern p = Pattern.compile("([r]\".:.\"[+|-][0-9]+.[0-9][0-9]\")");
Matcher m = p.matcher(raw_string);

我一直在尝试该模式的多种变体,但从未找到匹配项。第二双眼睛会很棒!

【问题讨论】:

    标签: java android regex


    【解决方案1】:

    你的正则表达式确实有效,几乎是正确的

    Pattern p = Pattern.compile("\"[r]\".:.\"[+|-][0-9]+.[0-9][0-9]\"");
    Matcher m = p.matcher(raw_string);
    if (m.find()){
        String res = m.toMatchResult().group(0);
    }
    

    【讨论】:

    • Matcher ISA MatchResult,所以m.group(0)(甚至m.group())就足够了。 +1 用于捕捉丢失的报价,并摆脱包罗万象的捕捉组。
    【解决方案2】:

    下一行应该是:

    if ( m.find() ) {
    

    你在做吗?

    其他一些问题:您使用. 来匹配冒号周围的空格;如果它总是应该是空格,你应该使用+(一个或多个空格)或\s+(一个或多个空格字符)。另一方面,数字之间的点应该匹配文字.,所以你应该转义它:\. 当然,由于这是一个Java字符串文字,你需要转义反斜杠:\\s+ , \\..

    r 周围不需要方括号,如果不想匹配数字前面的|,则应将[+|-] 更改为[+-]

    虽然我提到的其中一些问题可能会导致误报,但它们都不会阻止它匹配有效的输入。这就是为什么我怀疑您实际上并没有通过调用find() 来应用正则表达式。这是一个常见的错误。

    【讨论】:

      【解决方案3】:

      首先尝试转义您的点符号:...[0-9]+\.[0-9][0-9]...
      因为点符号匹配任何字符...

      第二件事:[+|-]define 一系列字符,但它是强制性的...
      试试[+|-]?

      阿尔班。

      【讨论】:

      • 文字点在“任何字符”的范围内,所以匹配会发生,顺便说一句,你建议[+|-]?还将匹配“r”:“|725.00”,因为括号(序列)内的字符不需要“OR”运算符
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-17
      • 1970-01-01
      • 2017-09-21
      相关资源
      最近更新 更多