我正在尝试使用以下程序使用正则表达式删除字符串中的某些单词。它正确删除,但它只考虑区分大小写。如何使其不区分大小写。我在(?1)
方法中保留了replaceAll
,但它无效。
package com.test.java;
public class RemoveWords {
public static void main(String args[])
{
// assign some words to string
String sample ="what Is the latest news today in Europe? is there any thing special or everything is common.";
System.out.print(sample.replaceAll("( is | the |in | any )(?i)"," "));
}
}
输出:
what Is latest news today Europe? there thing special or everything common.
答案 0 :(得分:32)
您需要将(?i)
放在模式中要使用不区分大小写的部分之前:
System.out.print(sample.replaceAll("(?i)\\b(?:is|the|in|any)\\b"," "));
^^^^
我已使用字边界(\\b
)替换要删除的关键字周围的空格。出现问题是因为可能有两个关键字一个接一个地被一个空格隔开。
如果您想仅在空格包围的情况下删除关键字,那么您可以使用正向前瞻和后视:
(?i)(?<= )(is|the|in|any)(?= )
答案 1 :(得分:4)
我认为您不能使用快速替换指定不区分大小写。 尝试使用模式。即:
package com.test.java;
public class RemoveWords {
public static void main(String args[]) {
// assaign some words to string
String sample ="what Is the latest news today in Europe? is there any thing special or everything is common.";
String regex = "( is | the |in | any )"
System.out.print
(
Pattern.compile(regex, Pattern.CASE_INSENSITIVE).matcher(sample).replaceAll("")
);
}
}
答案 2 :(得分:1)
将is
更改为[iI][sS]
sample.replaceAll("( [iI][sS] ...