请建议我使用括号中的单词的正则表达式
ex:hello(s)
我应该hello
作为输出
请建议我
我试过这些
[a-z]\\(s\\)
[a-z]\\(\\s\\)
答案 0 :(得分:4)
要匹配单词后面没有(s)
的单词(即匹配hello
中仅 hello(s)
),您可以使用正数先行:
\\w+(?=\\(s\\))
答案 1 :(得分:1)
它必须是一个或多个字母(用+
表示):
[a-z]+\\(s\\)
要获取不带(s)
的字符串,您可以使用预测或组。
对于组,必需的字符串必须在括号中:
([a-z]+)\\(s\\)
然后得到第一组,如下:
String str = "hello(s)";
String regex = "([a-z]+)\\(s\\)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
if (m.matches())
System.out.println(m.group(1));
答案 2 :(得分:1)
根据您所认为的单词,以下内容可行:
[a-z]+\\(s\\)
这只是假定小写的英文字母为单词,如果你使用不区分大小写的标志以及大写字母。但不会考虑Jörg
或var_ptr
。
答案 3 :(得分:1)
你也可以尝试这个
"hello(s)".replaceAll("\\(.*?\\)","")
答案 4 :(得分:0)
您可以尝试使用正则表达式:
(?<=\p{L}+)\(s\)
\p{L}
表示Unicode字母的类别。另外,您可以使用常量java.util.regex.Pattern
来避免每次重新编译表达式,如下所示:
private static final Pattern REGEX_PATTERN =
Pattern.compile("(?<=\\p{L}+)\\(s\\)");
public static void main(String[] args) {
String input = "hello(s), how are you?";
System.out.println(
REGEX_PATTERN.matcher(input).replaceAll("")
); // prints "hello, how are you?"
}