java - 使用java的regex api插入单词be

标签 java regex

我对正则表达式和 java 很陌生,所以请忍受我的新问题。

我想要执行以下操作:

如果我有一个字符串:

"I like ice cream only if it is chocolate ice cream. Chocolate cream" 

和类似的模式

"chocolate ice cream" 

我想匹配并替换所有与 # 包围的单词匹配的单词。像这样:

"I like #ice cream# only if it is #chocolate ice cream#. #Cholcolate cream#"

我使用了java的正则表达式API,我知道我可以使用Matcher.replaceAll。但我无法想出合适的正则表达式。我想出了这个巧克力*\\s*ice*\\s*cream*。但这里的问题是它只匹配整个子字符串,即“巧克力冰淇淋”。我认为这样的事情可以工作:

chocolate|ice|cream|chocolate ice|ice cream|chocolate cream|chocolate ice cream

等等,即所有排列,但是随着子字符串的增长,这会很麻烦。

如果有任何关于朝着正确方向前进的想法,我将不胜感激。

最佳答案

使用模式:

(?i)\b((?:chocolate|ice|cream)(?:\s+(?:chocolate|ice|cream))*)\b

并将其替换为:

#$1#

演示:

String s = "I like ice cream only if it is chocolate ice cream. Chocolate cream";
s = s.replaceAll("(?i)\\b((?:chocolate|ice|cream)(?:\\s+(?:chocolate|ice|cream))*)\\b", "#$1#");
System.out.println(s);

单词边界导致“creamy”(和其他此类单词)无法被替换。

请注意,这会将 “iceice” 更改为 “#iceice#”(即,这些词可以出现多次!),正如 @stema 提到的在评论中。

关于java - 使用java的regex api插入单词be,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6593735/

相关文章:

java - 正则表达式字符串仅保留具有某些不同标准的行java

java - 如何使用字符串、整数对的每种组合(其中整数在 Java 中具有最大值)进行有效计算?

java - Quartz作业java表名需要更改

c# - 在我的版本更新程序中更改次要值

regex - 何时使用正则表达式与内置字符串方法?

regex - 这两个正则表达式能给出不同的结果吗?

java - 如何使用xml或java设置FragmentTabHost动态高度

java - (Java) 实例化子类的不同方式

java - 实例化作业时 Quartz Scheduler 错误

python - 如何从python中具有特定条件的句子中提取数字?