Java正则表达式:将任何单个字符替换为空格

5
我希望能删除任何单个字符(包括字符串开头或结尾的单个字符)。例如,
String s = "I am testing regex. This'll print results for A B c d ^ * ( ) { } [ ] done .";
System.out.println(s);

应该打印出:
am testing regex. This'll print results for           done

我尝试过:
s = s.replaceAll("(\\s+.(?=\\s))", " ");

这给了我:

I am testing regex. This'll print results for           done .

我想在同一正则表达式中删除开头和结尾的单个字符。

2
任何非空格字符?尝试.replaceAll("(?<!\\S)\\S(?!\\S)", " "),并且可能需要在结果上使用trim() - Wiktor Stribiżew
任何字符(包括制表符等空格字符)。 - Alisa
要么使用.replaceAll("(?<!\\S)[^ ](?!\\S)", " "),要么使用.replaceAll("(?s)(?<!\\S).(?!\\S)", " ")都可以。 - Wiktor Stribiżew
1个回答

2

您可以使用

.replaceAll("(?s)(?<!\\S).(?!\\S)", " ")

或者

.replaceAll("(?<!\\S)[^ ](?!\\S)", " ")

并且,也许可以在结果上使用trim()。请参见正则表达式演示细节
  • (?s) - DOTALL嵌入式标志选项(使.可以匹配包括换行符在内的任何字符)
  • (?<!\S) - 负回顾需要当前位置之前的字符串开始或空格
  • . - (消费部分)任何单个字符(如果必须是除空格以外的任何字符,请使用[^ ]
  • (?!\S) - 负向先行断言要求当前位置右侧立即是字符串结束或空格。

请注意,您可以根据需要进一步调整消费部分。如果只需要匹配非空白字符,请将.替换为\S


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接