2013-09-10 4 views
2

Если у меня есть это:Split регулярных выражений на Пути

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]") 

приводит к тому, расщепляется происходить каждые/ч,/ш,/г,/т, а/м.

Как я могу написать регулярное выражение, чтобы разделить его только один раз на строку, только фиксируя пути?

Заранее спасибо.

+0

почему вы должны разбиваться() '? как насчет только получить соответствие '/ \\ S * $'? – Kent

+0

'/ thanks/mate' должно быть«/»в конце этого? – Cruncher

+0

Могут ли пути содержать пробелы или символы новой строки? Может ли целая линия быть тарабарщиной? –

ответ

3

Почему сплит? Я думаю, что работает матч здесь лучше, попробуйте следующее выражение:

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

Regex101 Demo

0

Это использует split():

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

ИЛИ

myString.split(myString.substring(0, myString.lastIndexOf(" ")))[1]; //works for current inputs 
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)); 

Output (достигающие требования):

[/hello/world/, /good/timing/, /thanks/mate] 
Смежные вопросы