2014-02-01 3 views
0

Я пытался написать своего рода сюрреалистическую приключенческую игру для моей дочери, все прошло хорошо, но я застрял в попытке обработать конкретный ввод с помощью RegEx.RegEx - Split string by word

Входная строка должна начинаться с цифры (необязательно десятичное), а затем либо последовательность символов (мин 1, макс п) сразу же после них пробелом, а затем и, или с последующим вместо по белому пространству, а затем n количество слов (без цифр) до раздвоенного слова (и). Любые слова после «и» должны быть захвачены также в другой группе.

Так пример действителен вход может быть:

5 blue cows and a bucket of milk 

или

2.5mph and a really slow car 

и разделить на три группы, как так:

[5] [blue cows] [a bucket of milk] or [2.5] [mph] [a really slow car] 

Будучи новым для регулярных выражений, которые я собираюсь заранее извиниться за мои ужасные попытки, но я считаю, что мне нужно использовать lookahead?

Мои попытки до сих пор выглядят как это:

работает нормально, но захватывает только одно слово с каждой стороны, например: [5][синий][а]

^(\d*\.?\d*)\s*([a-z]*)\s*\band\b\s([a-z]+) 

И этот с использованием lookahead захватывает несколько слов, как ожидалось, но каждый отдельный символ фиксируется отдельно:

^(\d*\.?\d*)\s*(.?)+(?=and)\s*\band\b\s((.?)+) 

Любая помощь была бы оценена по достоинству, тем более, что ответ моей дочери на проблему был чем-то вроде строк «Папочка, вы должны сбрить усы, тогда это сработает?»

Приветствия ребята :)

Стив

ответ

1

Я думаю, ваша проблема в том, что вы не включили пространство в группе соответствия. Проверьте это регулярное выражение:

^(\d*\.?\d*)\s*([a-z\s]*)\sand\s([a-z\s]*)$ 
+1

Все, спасибо, Szymon, отлично работает! –