簡體   English   中英

使用 java 的正則表達式 api 插入單詞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM