我有2种情况:
我想用正则表达式代替Sample Country!使用空字符串,此处的国家/地区不固定,可以是美国,法国等
我尝试过:
System.out.println(str.replaceAll("^(Sample[^!]+!)", ""));
我正在获取输出
! Test Data
我只想要
Test Data
字符串以Sample Country结尾!即测试数据示例国家/地区! 在这里我也只想
测试数据
有人可以提供正确的正则表达式及其解释吗?非常感谢
答案 0 :(得分:0)
编辑:
让我们做一个更好的方法。您将不仅拥有2个案例,还将拥有3个案例
(模式+数据) ---> ^ Sample [^!] +! (样式)([^!])(数据)
(数据+模式) --->([^!])(数据)样本[^!] +!$ (模式)
(模式+数据+模式) --->(^ Sample [^!] +!(pattern)([^!])< strong>(数据)示例[^!] +!$ (模式)
所以我们必须使用正则表达式检查字符串中的所有情况。在正则表达式中我们需要OR情况是“ |”另一件事是我们必须避免不匹配的情况必须被忽略,它与(?:( regex))descripted here
public class HelloWorld {
public static void main(String[] args) {
String[] testcases = new String[] {
"Sample foo ! Test1 Data",
"Sample bar ! Test2 Data",
"Test3 Data Sample foo !",
"Test4 Data Sample bar !",
"Sample bar ! Test5 Data Sample bar !"
};
for (String str: testcases) {
System.out.println(str.replaceAll("(?:(^Sample[^!]+!([^!])))|(?:(([^!])Sample[^!]+!$))|(?:(^Sample[^!]+!([^!]))Sample[^!]+!$)", "$2$4").trim());
}
}
} 我们在将数据分组为($ 2,$ 4)组之后使用了您的正则表达式并制作了一个新的正则表达式,因为我们将字符串替换为第2个和第4个组值。我希望这将有所帮助。 compile code online
答案 1 :(得分:0)
在此尝试此正则表达式:
String[] testcases = new String[] {
"Sample foo ! Test Data",
"Sample bar ! Test Data",
"Test Data Sample foo !",
"Test Data Sample bar !"
};
for (String str : testcases) {
System.out.println(str.replaceAll("(.* ?)(Sample[a-zA-Z ]+ ! ?)(.*)", "$1$3"));
}
说明:
(.* ?) // first match group, matches anything, followed by an optional space
(Sample[a-zA-Z ]+ ! ?) // second match group, matches the String "Sample followed by a series of letters (your country), a whitespace, an exclamation mark and an optional space
(.*) // third match group, matches anything
因此,第二个匹配组($ 2)将包含您的“样本国家/地区”字符串,我们可以仅将结果替换为第一个($ 1)和第三个($ 3)匹配组。