Java Regex-如何替换模式开头和结尾

时间:2019-01-17 23:49:15

标签: java regex replaceall

我有2种情况:

  1. 字符串从示例国家/地区开始!即示例国家!测试数据

我想用正则表达式代替Sample Country!使用空字符串,此处的国家/地区不固定,可以是美国,法国等

我尝试过:

System.out.println(str.replaceAll("^(Sample[^!]+!)", ""));

我正在获取输出

! Test Data 

我只想要

Test Data
  1. 字符串以Sample Country结尾!即测试数据示例国家/地区! 在这里我也只想

    测试数据

有人可以提供正确的正则表达式及其解释吗?非常感谢

2 个答案:

答案 0 :(得分:0)

编辑:

让我们做一个更好的方法。您将不仅拥有2个案例,还将拥有3个案例

  1. (模式+数据) ---> ^ Sample [^!] +! (样式)([^!])(数据)

  2. 数据+模式) --->([^!])(数据)样本[^!] +!$ (模式)

  3. (模式+数据+模式) --->(^ 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)匹配组。