2016-01-12 4 views
0

Добрый день, у меня есть Strings:Regex: Удалить все до и после второго «-»

"bus-nr-7b-Station-Yellow-Street", 
"bus-nr-8-Station-Lewis-Street", 
"train-nr-9-Station-Yield-Street", 
"bus-nr-10-Station-Harrow", 
"train-nr-10a-Station-Booki", 
"train-nr-11-Station-Horope", 
"bus-nr-12-Station-Erstin", 
"bus-nr-13-Station-Green-Street", 
"train-nr-13ab-Station-Final-Station", 

В конце я хотел бы:

"B:7b", 
"B:8", 
"T:9", 
"B:10", 
"T:10a", 
"T:11", 
"B:12", 
"B:13", 
"T:13ab", 

Итак, я хотел бы заменить все до второго - с B: или T: и удалите все после третьего -. Как я могу реализовать это с помощью регулярного выражения?

+1

Какой язык/инструмент? – ndn

+0

Java/Android это важно? – VLeonovs

+0

Вы писали что-нибудь ко всем, чтобы попробовать это? И с какими проблемами вы столкнулись? – Damien

ответ

1

Это быстрее, чтобы не использовать регулярное выражение в вашем случае:

String foo = "bus-nr-7b-Station-Yellow-Street"; 
String[] parts = foo.split("-"); 
String result = Character.toUpperCase(foo.charAt(0)) + ":" + parts[2]; 
0

Матч с:

^([bt])[^-]*-[^-]*-([^-]*) 

Результат:

match.group(1).toUpperCase() + ":" + match.group(2) 
0

Вам не нужно использовать регулярные выражения для этого.

for (String str : strings) { 
    String prefix; 
    if (str.startsWith("bus")) { prefix = "B"; } 
    else if (str.startsWith("train")) { prefix = "T"; } 
    else throw new AssertionError("Not bus or train"); 

    int firstDash = str.indexOf("-"); 
    int secondDash = str.indexOf("-", firstDash + 1); 
    int thirdDash = str.indexOf("-", secondDash + 1); 

    System.out.println(prefix + ":" + str.substring(secondDash, thirdDash)); 
} 
0

предположить s это одна строка текста.

  • Предположим, что текст в вашем файле действителен.

    s.substring(0, 1).toUpperCase() + ":" + s.split("-")[2]) 
    
Смежные вопросы