提问者:小点点

使用regex在每个单词的末尾追加一个字符


我正在寻找一个正则表达式(Java),它将在每个单词结束后附加'~'字符。
我的要求是:

  1. 在每个单词的末尾追加~
  2. 如果word中有任何特殊字符,则不要追加“~”。
  3. 如果有多个空格,则应将其修剪为单个空格。

请看我下面的例子:

Input: Hello World   How* A1e Y?u
Output: Hello~ World~ How* A1e~ Y?u

我从论坛获得了帮助,可以实现它,但无法实现#2.
我的代码段:

pattern = ([^\\s][a-zA-Z0-9])(\\s|$);
pattern.matcher(searchTerm).replaceAll("$1~$2");

如果word有任何特殊字符,如何跳过追加操作? 请建议。


共1个答案

匿名用户

我建议使用

searchTerm = searchTerm.replaceAll("(?<!\\S)\\w++(?!\\S)", "$0~").replaceAll("\\s{2,}", " ").trim();

查看Java演示

详细信息

  • (?<;!\s)-负向查找,确保当前位置之前有空白或字符串开头
  • \w++-1个或多个单词字符
  • (?!\s)-负向前看,确保当前位置后面有空白或字符串开头。

$0是整个匹配值。

.replaceAll(“\\s{2,}”,“”)(对于常规空格,只需将\\s替换为一个空格即可)部分将任意两个或多个空白字符“收缩”为一个空格,而.trim()部分则对两端空格的结果进行修剪。