【问题标题】:Specific Java Regex For Set Notation用于集合表示法的特定 Java 正则表达式
【发布时间】:2013-03-24 03:28:50
【问题描述】:

我正在尝试编写一个正则表达式来检查一个字符串是否是一组整数的形式

ex: {1, 23, -501, 52, 2387329, 0}

到目前为止,我得到了:

Pattern p = [({(([0-9]+,)*[0-9]+)})]

但它似乎不起作用...有人可以帮帮我吗?

谢谢!

【问题讨论】:

  • 你不处理-标志??您能否展示一些有效和无效的字符串示例?
  • 在开发复杂的正则表达式时,一个有用的技术是从命名字符串构建它们。 String lbrace = "[{]";String sInteger = "[+-]?\\d+";。然后从这些建立你的模式。查看精通正则表达式第二版中的邮件模式。
  • 我对正则表达式很陌生,我不确定我在这里做什么。一些有效的例子是:{1, 2, 3} {} {3} 而那些无效的例子是:{1 2 3} {a, b, c}
  • 想要{1 2 3}{a, b, c}工作吗?
  • 没有。它们应该是用逗号分隔的数字。我总是可以通过格式化字符串来去掉空格,所以即使是空格也不是必需的

标签: java regex set notation


【解决方案1】:
Pattern.compile("\\{\\s*(?:\\d+(?:\\s*,\\s*\\d+\\s*)*)?\\}")

匹配包围零个或多个逗号分隔的非负十进制整数的大括号。

\\s 匹配任何空格字符。 (?:...) 仅用于分组,大括号之间的内容实际上是(十进制数字后跟(任意数量的逗号,然后是十进制数字))可选。

我不知道你用的是什么符号

[({(([0-9]+,)*[0-9]+)})]

但它肯定不会匹配空集,也不会匹配逗号后有空格的任何内容。

【讨论】:

    【解决方案2】:

    试试这个正则表达式

    "\\{((-?\\d+), ?)*-?\\d+}"
    

    【讨论】:

    • 出于某种原因 {1 2 3} 正在使用它。有什么理由会发生这种情况吗?
    • 我测试了 "{1 2 3}".matches("\\{((-?\\d+), )*-?\\d+}");它返回错误
    【解决方案3】:

    试试这个。

            String data = "{1, 23, -501, 52, 2387329, 0}";
        Pattern pattern = Pattern.compile("\\{(\\s?-?\\d+?\\,?\\s?)+?\\}");
    
        Matcher matcher = pattern.matcher(data);
        while (matcher.find()) {
            // Indicates match is found. Do further processing
            System.out.println(matcher.group());
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多