如何用正则表达式删除第二个子字符串?

时间:2013-10-12 17:10:10

标签: java regex

String text;
System.out.println(text);

在控制台中它看起来像这样:

The US.....................................
Illinois Commerce .......... ..............
...........................................
..........................Illinois Commerce 

我需要摆脱第二个子串Illinois Commerce


这就是我的尝试:

text = text.replaceAll("(?:Illinois Commerce:.*?){2}", "");

我得到java.lang.ArrayIndexOutOfBoundsException: 1

4 个答案:

答案 0 :(得分:5)

你可以试试这个:

text = text.replaceFirst("(Illinois Commerce(?s).*?)Illinois Commerce", "$1");

答案 1 :(得分:3)

这应该是假设它跟随字符串的空格或结尾。

text = text.replaceAll("Illinois Commerce(?= ?$)", "");

或者以下内容适用于此案例。

text = text.replaceAll("\bIllinois Commerce\s*$", "");

答案 2 :(得分:2)

我不会使用正则表达式。我会做的是:

  • 查找第一次出现"Illinois Commerce"
  • 的索引
  • index + 1获取子字符串直到结束。
  • 替换该子字符串中的"Illinois Commerce"。这将确保我不会替换1 st 的出现,因为它不会在此子字符串中完全可用。
  • 然后将字符串的第一部分与结果子字符串连接起来。

这就是代码的样子:

int index = text.indexOf("Illinois Commerce");      
String result = text.substring(0, index + 1) + 
                text.substring(index + 1).replace("Illinois Commerce", "");     
System.out.println(result);

  • text.substring(0, index + 1)会将字符串带到第一个I的{​​{1}}。

  • Illi....将从第一个text.substring(index + 1)的{​​{1}}开始,直到字符串结束。因此,唯一要替换的字符串是第二次出现。

答案 3 :(得分:1)

由于只有两次出现,lastIndexOf可能比这种情况下的正则表达式好。

无论如何,以下是regx和lastIndexOf方法。

public static void main(String[] args) {

    String test = "The US.....................................\n" +
       "Illinois Commerce .......... ..............\n" +
       "...........................................\n" +
       "..........................Illinois Commerce \n";
    String toFind = "Illinois Commerce";

    System.out.print("regex\n");
    System.out.println(test.replaceAll( "(?s)^(.*)"+toFind+"(.*)$", "$1$2" )); 

    System.out.print("\nlastIndexOf\n");
    int start = test.lastIndexOf(toFind);
    System.out.println( test.substring( 0, start)
            + test.substring(start+toFind.length())); 
}