下面是字符串值
"method" <in> abs
("method") <in> abs
method <in> abs
我想只提取单词method
,我尝试使用以下正则表达式
"(^[^\\<]*)"
其中包括特殊字符
上述正则表达式的O / p
"method"
("method")
method
我的预期输出
method
method
method
答案 0 :(得分:2)
答案 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]+