[英]regex replace all ignore case
如何忽略以下示例中的大小寫?
outText = inText.replaceAll(word, word.replaceAll(" ", "~"));
例:
輸入:
inText = "Retail banking Wikipedia, the free encyclopedia Retail banking "
+ "From Wikipedia. retail banking industry."
word = "retail banking"
產量
outText = "Retail~banking Wikipedia, the free encyclopedia Retail~banking " +
"From Wikipedia. retail~banking industry."
要進行不區分大小寫的搜索和替換,您可以更改
outText = inText.replaceAll(word, word.replaceAll(" ", "~"));
成
outText = inText.replaceAll("(?i)" + word, word.replaceAll(" ", "~"));
然而,在上面的方法中,你破壞了替換詞的大寫。 這是一個更好的建議:
String inText="Sony Ericsson is a leading company in mobile. " +
"The company sony ericsson was found in oct 2001";
String word = "sony ericsson";
Pattern p = Pattern.compile(word, Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(inText);
StringBuffer sb = new StringBuffer();
while (m.find()) {
String replacement = m.group().replace(' ', '~');
m.appendReplacement(sb, Matcher.quoteReplacement(replacement));
}
m.appendTail(sb);
String outText = sb.toString();
System.out.println(outText);
輸出:
Sony~Ericsson is a leading company in mobile.
The company sony~ericsson was found in oct 2001
這是我的方式:
private String replaceAllIgnoreCase(final String text, final String search, final String replacement){
if(search.equals(replacement)) return text;
final StringBuffer buffer = new StringBuffer(text);
final String lowerSearch = search.toLowerCase(Locale.CANADA);
int i = 0;
int prev = 0;
while((i = buffer.toString().toLowerCase(Locale.CANADA).indexOf(lowerSearch, prev)) > -1){
buffer.replace(i, i+search.length(), replacement);
prev = i+replacement.length();
}
return buffer.toString();
}
似乎在我的范圍內完美地工作。 按我的方式做的好處是我的解決方案中沒有正則表達式,這意味着如果你想要替換括號或加號(或任何其他元字符),它實際上將替換文本實際上它的內容是,而不是正則表達式中的含義。 希望這有所幫助。
您可以在進行搜索之前將其全部轉換為小寫,或者查看正則表達式修飾符Pattern.CASE_INSENSITIVE
您沒有指定語言。
Java有Pattern.CASE_INSENSITIVE
C#和VB有RegexOptions.IgnoreCase
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.