2

如果我有这个:

thisisgibberish  1234 /hello/world/
more gibberish 43/7 /good/timing/
just onemore    8888  /thanks/mate

Java String.split() 方法中的正则表达式是什么来获取每行的路径?

IE。

[0]: /hello/world/
[1]: /good/timing/
[2]: /thanks/mate

正在做

myString.split("\/[a-zA-Z]") 

导致拆分发生在每个 /h、/w、/g、/t 和 /m 上。

我将如何编写正则表达式以每行仅拆分一次而仅捕获路径?

提前致谢。

4

3 回答 3

3

为什么要分裂?我认为在这里运行比赛更好,请尝试以下表达式:

(?<=\s)(/[a-zA-Z/])+

正则表达式 101 演示

于 2013-09-10T20:13:20.500 回答
0

这使用split()

String[] split = myString.split(myString.substring(0, myString.lastIndexOf(" ")));        

或者

myString.split(myString.substring(0, myString.lastIndexOf(" ")))[1]; //works for current inputs
于 2013-09-10T20:44:09.063 回答
0

您必须首先删除领先的垃圾,然后在中间的垃圾上拆分:

String[] paths = str.replaceAll("^.*? (?=/[a-zA-Z])", "")
    .split("(?m)((?<=[a-zA-Z]/|[a-zA-Z])\\s|^).*? (?=/[a-zA-Z])");

这里的一个重点是使用(?m),它是一个打开“点匹配换行符”的开关,它是分隔换行符所必需的。

下面是一些测试代码:

String str = "thisisgibberish  1234 /hello/world/\nmore gibberish 43/7 /good/timing/\njust onemore    8888  /thanks/mate";
String[] paths = str.replaceAll("^.*? (?=/[a-zA-Z])", "")
    .split("(?m)((?<=[a-zA-Z]/|[a-zA-Z])\\s|^).*? (?=/[a-zA-Z])");
System.out.println( Arrays.toString( paths));

输出(达到要求):

[/hello/world/, /good/timing/, /thanks/mate]
于 2013-09-10T21:11:03.250 回答