Java Regex替换某个字符串中的模式

Isu*_*era -4 java regex string replace

我想在一个字符串中替换以#开头的单词,该字符串包含具有相同单词的单词集(#ignored)

"word1 word2 #user "应替换为"word1 word2 user "

有人能帮我吗?

Psh*_*emo 5

你可以使用正则表达式.让我们开始吧

yourText = yourText.replaceAll("#(\\S+)", "$1");
Run Code Online (Sandbox Code Playgroud)

在正则表达式:

  • \S 表示任何非空白字符
  • +代表一个或多个
  • \S+ 表示一个或多个非空白字符
  • (\S+) -parenthesis创建包含一个或多个非空白字符的组,该组将被编入索引 1

替代

  • $1 替换允许我们使用组1的内容.

换句话说,它会尝试找到#non-whitespaces(并将其替换为non-whitespaces部分.

但是这个解决方案不需要#开头.要做到这一点,我们可以检查是否#

  • 空白空间\s,
  • 或者字符串的开头^.

为了测试某些东西是否在我们的元素之前而没有在我们的匹配中实际包含它,我们可以使用look-behind (?<=...).

所以我们的最终解决方案看起来像

yourText = yourText.replaceAll("(?<=^|\\s)#(\\S+)", "$1");
Run Code Online (Sandbox Code Playgroud)