2015-07-31 2 views
0

Я получаю строку, представляющую путь. Для testpurposes позволяет сказать, я получаю:Сплит-путь (String) в 3 частях

abc/def/ghi/jkl/.... 

Я хочу, чтобы выплюнуть эту строку следующим образом (2 первых отделено & комбинированный отдых):

Items(0) = "abc" 
Items(1) = "def" 
Items(2) = "ghi/jkl/..." 

Я решил использовать регулярное выражение следующим образом :

Dim someString = "abc/def/ghi/jkl/...." 
    Dim Items() As String = Regex.Split(someString, "([_0-9a-zA-Z-]+)/([0-9a-zA-Z]+)/(.*)") 

Но им получить следующий вывод:

Items(0) = "" 
Items(1) = "abc" 
Items(2) = "def" 
Items(3) = "ghi/jkl/..." 
Items(4) = "" 

Может кто-нибудь объяснить, что вызывает пустую строку в начале и в конце?

Я благодарю вас за ваше время и желаю вам приятного уик-энд

+0

Вы ввели '$' и '^'. –

+0

@ DanielA.White. Нет, на самом деле. требуется ли избегать этих пустых строк? – User999999

ответ

2

String.Split в сочетании с методом Skip может быть читаемой и компактной альтернативой для решения этой проблемы:

Dim text = "abc/def/ghi/jkl/...." 

    Dim parts As String() = text.Split("/"c) 

    If parts.Count >= 2 Then 
     Dim items As String() = {parts.First, parts.Skip(1).First, String.Join("/", parts.Skip(2))} 
    End If 
+0

Возможно, было бы неплохо проверить, что 'parts' имеет как минимум три элемента. – Blackwood

+1

Спасибо за предложение, я добавил чек. На самом деле 2 элемента будут работать также со String.Join не имеет проблемы с пустым Enumerable. – Saragis

+0

Хорошая идея. Но я надеялся на более «регулярное выражение». Но это решает мою проблему! Проверит это завтра в офисе – User999999

2
(\w+?)\/(\w+?)\/(.*) 

это должно работать для ваших целей. Просто выполнить матч с этим регулярным выражением и расколом на захвате группы 1, 2 и 3.

Regex101

+0

Jeezes, который выглядит в 10 раз более простым, чем мой! Но я все еще заполняю эти пустые строки. – User999999

Смежные вопросы