如何在java中删除包含特定字符的单词?
有没有办法使用正则表达式删除包含“@”字符的整个单词 例如,应删除以下单词:如何在java中删除包含特定字符的单词?,java,regex,string,filereader,symbols,Java,Regex,String,Filereader,Symbols,有没有办法使用正则表达式删除包含“@”字符的整个单词 例如,应删除以下单词:kʌn@tənɪu和b@ilu 我试过: line = br.readLine(); line = line.replaceAll("\\b[@]+\\b",""); System.out.println(line); 。。。它只删除“@”符号,而不删除单词本身 line = br.readLine(); line = line.replaceAll("\\b.+?[@]+.+?\\b",""); System.out
kʌn@tənɪu
和b@ilu
我试过:
line = br.readLine();
line = line.replaceAll("\\b[@]+\\b","");
System.out.println(line);
。。。它只删除“@”符号,而不删除单词本身
line = br.readLine();
line = line.replaceAll("\\b.+?[@]+.+?\\b","");
System.out.println(line);
编辑:*?
不好。我测试了最新的编辑,它对我有效
String test = " x+1@ three@two @@ o@ne @ two";
test = test.replaceAll("\\b.+?[@]+.+?\\b","");
System.out.println(test);
给予
two
使用正则表达式
[^@\s]*@\S*
[^@\s]*查找零个或多个不是“@”或空白的字符
@查找一个“@”
\s*查找零个或多个非空白字符
因此,代码行应该是:
line = line.replaceAll("[^@\\s]*@\\s*","");
您可以使用以下正则表达式:
(\\s+)([^\\s]*?@[^\\s]*?)(\\s+)
如果要将其替换为周围的两个空格,可以将其替换为$1$3
如果只想将其替换为一个空格(这样看起来更好),可以将其替换为$1
或$3
在regex101.com上,下面是它的工作原理:
\\s
匹配任何空白字符\\s
+
将任何空白字符加工一次或多次
[^\\s]
匹配任何非空白字符[^\\s]
*?
多次匹配任何非空白字符,并尝试查找最小匹配项
@
逐字匹配字符@
[^\\s]
匹配任何非空白字符[^\\s]
*?
多次匹配任何非空白字符,并尝试查找最小匹配项
\\s
匹配任何空白字符\\s
+
将任何空白字符加工一次或多次
定义“单词”。。。还有,“单词”之间的间距呢?要保留它们吗?它不会替换字符串“@”中的“@”。对我来说是的。我刚刚用新的测试字符串更新了我的答案。我懂了。你的意思是仅限“@”。同意。不适用于此。
匹配任何非行终止符的字符(相当于Java中的[^\r\n\u0085\u2028\u2029]
,但其他样式对其的定义不同)。对于非空白字符,请使用\S
。