【问题标题】:Match decimals from a string with regex使用正则表达式匹配字符串中的小数
【发布时间】:2013-01-09 10:44:27
【问题描述】:

我想使用正则表达式从字符串中得到两位小数,但我只得到第一个。

getGroupCount 是正确的,但我总是得到{1},我不知道为什么。我正在使用 GWT 2.5。这是我的代码:

private void readOffset(){
    RegExp regExp = RegExp.compile("(\\{\\d\\})");

    MatchResult matcher = regExp.exec("(cast({1} as float)/{24})");

    String val1 = matcher.getGroup(0);
    String val2 = matcher.getGroup(1);
}

为什么会发生这种情况?

【问题讨论】:

  • 您在 gwt 客户端代码上使用 com.google.gwt.regexp.shared 包中的 RegExp 和 MatchResult 包?
  • 如果您期待 gwt 客户端代码帮助,那么您应该删除 regex/java 标记。 GWT 正则表达式不同!!!!!!
  • 来自 com.google.gwt.regexp.shared 包

标签: regex gwt


【解决方案1】:

运算符 \d 只会产生 1 位数字。如果你想得到两个,你需要使用\d{2}。如果需要匹配更多,则需要使用\d+,其中+表示1次或多次重复。

类似的东西对我有用(虽然是 Java,但不完全是 GWT):

        String str = "(cast({1} as float)/{24})";
        Pattern p = Pattern.compile("(\\{\\d+\\})");
        Matcher m = p.matcher(str);         
        while(m.find())
        {
            System.out.println(m.group(1));
        }

产量:{1} 和 {24}

【讨论】:

  • 除此之外,他还在混淆分组和匹配项
  • 我改成了 \d+ 但我仍然是同一个组。
  • @user1573659 我添加了一些额外的 Java 代码,它们应该可以引导您朝着正确的方向前进。
  • GWT 正则表达式的实现不同于普通的正则表达式。正常的 java 答案可能不起作用
【解决方案2】:

要了解如何在 GWT 客户端使用正则表达式,请查看 GWT 中的正则表达式单元测试用例。参考——GWT Unit Test for Regex

您还应该使用 com.google.gwt.regexp.shared 中的 RegExp 和 MatchResult。

【讨论】:

【解决方案3】:

我对正则表达式很愚蠢,所以我快速而肮脏地解决了它:

private void readOffset(){
    String offset = manager.get("offset");

    String v1 = offset.substring(offset.indexOf("{")+1, offset.indexOf("}"));
    String v2 = offset.substring(offset.lastIndexOf("{")+1, offset.lastIndexOf("}"));

    multiplikator.setValue(v1);
    divisor.setValue(v2);

    /*
    RegExp regExp = RegExp.compile(".*({\\d+}).*", "g");
    MatchResult matcher = regExp.exec(offset);
    boolean matchFound = (matcher != null);

    if(matchFound == true && matcher.getGroupCount() == 2){
        String val1 = matcher.getGroup(0);
        String val2 = matcher.getGroup(1);

        multiplikator.setValue(matcher.getGroup(0));
        divisor.setValue(matcher.getGroup(1));
    }else{
        multiplikator.setValue("1");
        divisor.setValue("1");
    }
    */
}

欢迎提供更好的解决方案:(

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-30
    • 2012-06-05
    • 2013-12-25
    • 1970-01-01
    相关资源
    最近更新 更多