我对正则表达式和 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/