【问题标题】:Java and Javascript Regex format for numbers after an @ sign [closed]@符号后数字的Java和Javascript正则表达式格式[关闭]
【发布时间】:2013-07-27 12:35:34
【问题描述】:

Java 中的正则表达式是什么,用于在格式如下的字符串中捕获 @ 符号后的文本片段:

@+300 regex returns +300

@300 regex that should returns 300

@300.00 regex that should return 300.00

123123@300.00 should not return anything

@300.00@ should not return anything

@300.00.00 should not return anything

类似于 Twitter 中提及的用户名,但带有十进制数字(正数和负数)。

【问题讨论】:

  • JavaScript 与 Java 相差甚远。不应同时标记问题。
  • 您是否尝试过自己解决这个问题? StackOverflow 问题应展示对所提问题的最低限度理解,包括尝试的解决方案。
  • @Dukeling 我非常感谢那些能够回答这个问题的 Javascript 和 Java 答案的人。是的,我已经用 Java 完成了,但我被这个正则表达式卡住了,很难进一步扩展它:(?:\\s|\\A)[@]+([0-9-_]+)
  • @300.000@300. 怎么样?
  • @300.000 = 没问题,但对于 @300. 它不应该返回任何东西

标签: java javascript regex parsing text


【解决方案1】:

试试这个:

String myString = "@123.45";
String returned = null;

Pattern p = Pattern.compile("^@([+-]?\\d+(?:\\.\\d+)?)$");
Matcher m = p.matcher(myString);

if(m.find()) {
    returned = m.group(1);
}

【讨论】:

  • (?:\\+)? 可以简化为 \\+? 但应更改为 [+-]? 以包括负数。并且您应该使用matches,而不是find(为了语义正确性和可能的​​性能,尽管鉴于您使用^$,它不会改变输出)。而1..1 通常被认为是十进制数的有效格式,但是否需要这些是任何人的猜测。
  • @Dukeling 对,抱歉,在澳大利亚已经是晚上 11 点了,我几乎所有的神经元都在睡觉……正在修复
  • 我再次做了 OP 未指定的假设。再次修复
【解决方案2】:

试试这个:

@([+-]?\d+(?:\.\d+)?)

然后考虑出局的第一组。

【讨论】:

    【解决方案3】:

    在 Java 上试试这个,如果有帮助,请告诉我 -

        String toCheck = "@300.20";
        Pattern p = Pattern.compile("^@([+-]?\\d+(?:\\.\\d+)?)$");
        Matcher m = p.matcher(toCheck);
    
        if (m.matches()){
            System.out.println(m.group(1));
        } else {
            System.out.println("Oops! didn't match");
        }
    

    对于 Javascript,这可能会有所帮助-

       var toCheck= "@300.20";
       var regex = /^@([+-]?\d+(?:\.\d+)?)$/;
       var matches = regex.exec(toCheck);
       var reqd = matches[1];
    

    【讨论】:

    • @Ace Subido,你觉得我的回答对你有用吗?它甚至不会匹配 300。你想要的方式。谢谢!
    • 它不会匹配@1 并且不包含可选的+- 符号,除了它与a somewhat older answer 非常相似。 (我没有投反对票)
    • @Dukeling:啊!!!我明白了 - 再次感谢。现在看起来还好吗?我的回答还包括 Javascript 正则表达式,其中一些事情是不同的。所以,它并不相似。
    • @1. 仍将匹配。请参阅the other answer 了解避免这种情况的方法。
    • @Dukeling- 是的!它或多或少变得像摩根诺所做的那样。不过,我对 Javascript 部分有一些更新。那么,我应该保留这个答案吗?还是删除?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2016-12-12
    • 2023-04-08
    • 2015-04-27
    • 1970-01-01
    相关资源
    最近更新 更多