正则表达式替换所有忽略大小写

daz*_*zle 11 java regex

如何忽略以下示例中的大小写?

outText = inText.replaceAll(word, word.replaceAll(" ", "~"));
Run Code Online (Sandbox Code Playgroud)

例:

输入:

inText = "Retail banking Wikipedia, the free encyclopedia Retail banking "
       + "From Wikipedia. retail banking industry."

word   = "retail banking"
Run Code Online (Sandbox Code Playgroud)

产量

outText = "Retail~banking Wikipedia, the free encyclopedia Retail~banking " +
          "From Wikipedia. retail~banking industry."
Run Code Online (Sandbox Code Playgroud)

aio*_*obe 23

要进行不区分大小写的搜索和替换,您可以更改

outText = inText.replaceAll(word, word.replaceAll(" ", "~"));
Run Code Online (Sandbox Code Playgroud)

outText = inText.replaceAll("(?i)" + word, word.replaceAll(" ", "~"));
Run Code Online (Sandbox Code Playgroud)

避免破坏原始大写:

然而,在上面的方法中,你破坏了替换词的大写.这是一个更好的建议:

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);
Run Code Online (Sandbox Code Playgroud)

输出:

Sony~Ericsson is a leading company in mobile.
The company sony~ericsson was found in oct 2001
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果没有`UNICODE_CASE`或`(?u)`标志,您将无法获得正确的Unicode casefolding.这与纯ASCII数据无关,但是如果你有非ASCII套管字母,包括像罗马数字这样的拉丁字母,比如`king henryⅷ`和`KingHenryⅧ`,它们是彼此的大小写变体.一个简单的非拉丁语的例子是`ΣΤΙΓΜΑΣ`,`στιγμας`和`στιγμασ`应该彼此不匹配,因为希腊sigma有三种不同的形式.(是的,我知道`στιγμα`的复数实际上是'στιγματα`.:) (3认同)

tam*_*ech 0

您没有指定语言。

Java有Pattern.CASE_INSENSITIVE

C# 和 VB 有 RegexOptions.IgnoreCase