【问题标题】:Java Regex for words including dash?包括破折号在内的单词的Java正则表达式?
【发布时间】:2017-09-01 14:58:19
【问题描述】:

我有一个input,需要使用regexp 拆分和提取/ 之间的所有Strings

我尝试使用:\/\s*(\w+)

这会产生:/pathvalue1

示例输入:

/pathvalue1/path-value-one /pathvalue2/path-value /pathvalue3/pathvaluethree

我需要的输出:

pathvalue1 path-value-one pathvalue2 path-value pathvalue3 pathvaluethree

有什么提示吗? 非常感谢!

【问题讨论】:

  • 为什么不简单地使用split() 拆分/ 处的字符串?
  • 我似乎用regexp 完成了更“专业”的工作,我想给人留下深刻印象。是的,我知道,这不是最好的论据。我正在努力学习regexp 匹配。
  • 正如其他人所说,但为了回答您的问题:\/\s*([^/]+) ;-)
  • “更专业”的方法是为手头的工作使用最好的工具。 :)
  • "/string1/string2".split("/"); ==> ["","string1","string2"],这还不够吗?

标签: java regex


【解决方案1】:

正如 Kushan 在他的回答中指出的那样,我会使用拆分方法。但是,如果您仍然想使用正则表达式,那么您可以使用这样的正则表达式:

([\w-]+)  or
([a-z-]+) with insensitive flag

Working demo

Java 代码

String text = "/pathvalue1/path-value-one\n" +
              "/pathvalue2/path-value\n" +
              "/pathvalue3/pathvaluethree";

Matcher m = Pattern.compile("([\\w-]+)").matcher(text);

while (m.find()) {
    System.out.println(m.group(1));
}

IdeOne working demo

输出

pathvalue1
path-value-one
pathvalue2
path-value
pathvalue3
pathvaluethree

【讨论】:

    【解决方案2】:

    使用字符串拆分函数将字符串拆分为数组

    String[] yourarray = Yourstring.split("/");
    

    这应该会分开您的路径并为您提供单独的值。

    您也会在数组中找到以连字符分隔的值。

    【讨论】:

      【解决方案3】:

      如果您坚持使用正则表达式,则可以将 [^/\\s]+ 与这样的 Pattern 一起使用:

      String[] strs = new String[]{"/pathvalue1/path-value-one",
          "/pathvalue2/path-value",
          "/pathvalue3/pathvaluethree"};
      String regex = "[^/\\s]+";
      for (String str : strs) {
          Pattern pattern = Pattern.compile(regex);
          Matcher matcher = pattern.matcher(str);
      
          while (matcher.find()) {
              System.out.println(matcher.group());
          }
      }
      

      输出

      pathvalue1
      path-value-one
      pathvalue2
      path-value
      pathvalue3
      pathvaluethree
      

      regex demo


      如果您直接使用 split str.split("/") ,您也可以使用 split just one point 来解决您的问题,而不是得到这个结果:

      [, pathvalue1, path-value-one]
      

      为确保您得到正确的结果,然后替换 url 开头的无用 / 或空格,以便您可以使用:

      String[] strs = new String[]{"/pathvalue1/path-value-one",
          "/pathvalue2/path-value",
          "/pathvalue3/pathvaluethree"};
      for (String str : strs) {
          System.out.println(Arrays.toString(str.replaceAll("^[/\\s]", "").split("/")));
      }
      

      输出

      [pathvalue1, path-value-one]
      [pathvalue2, path-value]
      [pathvalue3, pathvaluethree]
      

      【讨论】:

        猜你喜欢
        • 2017-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-19
        • 1970-01-01
        相关资源
        最近更新 更多