Java:与正则表达式匹配并替换每个字符

标签 java regex replace

我有一个字符串,例如:

There exists a word *random*.

random 将是一个随机词。
我如何使用正则表达式将 random 的每个字符替换为 * 并得到以下结果:

There exists a word ********.

因此 * 替换了每个字符,在本例中为 6 个字符。
请注意,我只是要替换单词 random,而不是周围的 *。 到目前为止,我有:

str.replaceAll("(\\*)[^.]*(\\*)", "\\*");

但是它将*random*替换为*,而不是想要的*********(总共8个) .
任何帮助,非常感谢...

最佳答案

如果你只有一个这样的词:-

就当前示例而言,如果您只有一个这样的单词,那么您可以使用一些 String 类方法将自己从正则表达式中拯救出来:-

String str = "There exists a word *random*.";

int index1 = str.indexOf("*");
int index2 = str.indexOf("*", index1 + 1);

int length = index2 - index1 - 1;   // Get length of `random`

StringBuilder builder = new StringBuilder();

// Append part till start of "random"
builder.append(str.substring(0, index1 + 1));

// Append * of length "random".length()
for (int i = 0; i < length; i++) {
    builder.append("*");
}

// Append part after "random"
builder.append(str.substring(index2));

str = builder.toString();

如果你可以有多个这样的词:-

为此,这是一个正则表达式解决方案(这是它开始变得有点复杂的地方):-

String str = "There exists a word *random*.";
str = str.replaceAll("(?<! ).(?!([^*]*[*][^*]*[*])*[^*]*$)", "*");
System.out.println(str);

上面的模式用*替换了所有不跟在包含偶数个*的字符串后面的字符,直到最后。

适合自己的就用吧。

我将添加对上述正则表达式的解释:-

(?<! )       // Not preceded by a space - To avoid replacing first `*`
.            // Match any character
(?!          // Not Followed by (Following pattern matches any string containing even number of stars. Hence negative look-ahead
    [^*]*    // 0 or more Non-Star character
    [*]      // A single `star`
    [^*]*    // 0 or more Non-star character
    [*]      // A single `star`
)*           // 0 or more repetition of the previous pattern.
[^*]*$       // 0 or more non-star character till the end.     

现在上面的模式将只匹配那些在一对星星内的单词。前提是您没有任何不平衡的星星

关于Java:与正则表达式匹配并替换每个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14681175/

相关文章:

c# - Java/C# 类中实例变量的使用

java - 如何从 setImageResource() 调整第二个图像的大小

标点符号的Javascript正则表达式(国际)?

javascript - 使用 Javascript Regex 转义 Lucene 字符

jquery - JavaScript 中相同 match() 方法的两个字符串

java - MapReduce:如何将 HashMap 传递给映射器

java - 单元测试 Jade

php - Mysql 替换并删除旧条目

regex - 如何在 R 中正确格式化此 Regex 搜索?它在在线测试仪中运行良好

Objective-C – 用一个空格替换换行序列