Java Regex Word Extract排除了特殊字符

时间:2015-08-31 09:11:30

标签: java regex

下面是字符串值

"method" <in> abs
("method") <in> abs
method <in> abs

我想只提取单词method,我尝试使用以下正则表达式

"(^[^\\<]*)"其中包括特殊字符

上述正则表达式的O / p

"method"
("method")
method

我的预期输出

method
method
method

3 个答案:

答案 0 :(得分:2)

^\\W*(\\w+)

您可以使用此功能并抓住group 1capture 1。请参阅演示。

https://regex101.com/r/sS2dM8/20

答案 1 :(得分:1)

"(^[^<]*)"正则表达式上的几个单词:它不匹配,因为它在^之后有字符串锚"的开头,但事实并非如此。但是,即使您将其删除"([^<]*)",也不会与缺少"(的最后一种情况相匹配。你需要让它们成为可选的。请注意括号必须转义,引号和括号的顺序与输入中的顺序不同。

所以,你的正则表达式可以修复为

^\(?"?(\b[^<]*)\b"?\)?(?=\s+<)

请参阅demo

但是,我建议使用replaceAll方法:

String rx = "(?s)\\(?\"?(.*?)\"?\\)?\\s+<.*";
System.out.println("\"My method\" <in> abs".replaceAll(rx, "$1"));

请参阅IDEONE demo

如果字符串以("My method开头,您还可以将^添加到模式的开头:String rx = "(?s)^\\(?\"?(.*?)\"?\\)?\\s+<.*";

正则表达式(?s)^\\(?\"?(.*?)\"?\\)?\\s+<.*匹配:

  • (?s)使.与换行符号匹配(可能没有必要)
  • ^ - 匹配字符串的开头
  • \\(? - 匹配可选的(
  • \"? - 匹配可选的"
  • (.*?) - 尽可能少地匹配和捕获第1组中的任何字符
  • \"? - 匹配可选的"
  • \\)? - 匹配可选的)
  • \\s+ - 匹配1个或多个空格
  • < - 匹配<
  • .* - 将0个或多个字符与字符串末尾匹配。

使用$1,我们会在结果字符串中恢复第1组文本。

答案 2 :(得分:0)

事实上它并不太复杂 这是我的答案:

        Pattern pattern = Pattern.compile("([a-zA-Z]+)");
        String[] myStrs = {
                "\"method\"",
                "(\"method\")",
                "method"
                };

        for(String s:myStrs) {
            Matcher matcher = pattern.matcher(s);
            if(matcher.find()) {
                System.out.println( matcher.group(0) );
            }
        }

输出结果为:

method
method
method

你只需要使用:

[a-zA-Z]+