[英]Using java's regex api to insert words be
我是正則表達式和 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
。 但是我在想出一個合適的正則表達式時遇到了麻煩。 我想出了這個chocolate*\\s*ice*\\s*cream*
。 但這里的問題是它只匹配整個 substring,即"chocolate ice cream"
。 我認為這樣的事情可以工作:
chocolate|ice|cream|chocolate ice|ice cream|chocolate cream|chocolate ice cream
等等,即所有排列,但是隨着 substring 的增長,這會很麻煩。
我將不勝感激有關朝着正確方向前進的任何想法。
使用模式:
(?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);
邊界一詞導致“奶油”(和其他此類詞)不能被替換。
請注意,這會將"ice ice"
更改為"#ice ice#"
(即,單詞可以出現不止一次)。 正如評論中提到的@stema。
(?:chocolate|ice|cream)(?:\s+(?:chocolate|ice|cream))*
這將匹配一個或多個由空格分隔的指定單詞
嘗試這個:
final String source = "I like ice cream only if it is chocolate ice cream. Chocolate cream";
final String result = source.replaceAll("((?:[Cc]hocolate )?(?:[Ii]ce )?cream)", "#$1#");
// Prints I like #ice cream# only if it is #chocolate ice cream#. #Chocolate cream#
System.out.println(result);
有關詳細信息,請參閱可選項目。
也許你會從 Java API 中找到有趣的 MessageFormat
Object[] testArgs = {new Long(3), "MyDisk"};
MessageFormat form = new MessageFormat(
"The disk \"{1}\" contains {0} file(s).");
System.out.println(form.format(testArgs));
// output, with different testArgs
output: The disk "MyDisk" contains 0 file(s).
output: The disk "MyDisk" contains 1 file(s).
output: The disk "MyDisk" contains 1,273 file(s).
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.