C # регулярное выражение, чтобы соответствовать строке, которая имеет разделитель - PullRequest
0 голосов
/ 13 марта 2009

Мне нужна помощь с регулярным выражением. я хочу получить строку с разделителем между двумя конкретными словами.

например. мне нужно регулярное выражение, которое соответствует:

Заявления1 начальные заявления2; Заявления3 конец веселья;

Между 'start' и 'end' может быть несколько раз ';'.

Заявления - это несколько слов, где (. *) Может использоваться в регулярном выражении для слова.

Но регулярное выражение не должно совпадать, если между «start» и «end» нет «;».

Кроме того, 'end' должен быть первым 'end', встреченным после 'start'

Итак, регулярное выражение не должно совпадать

Заявления1 начальные заявления2 конечные заявления3; конец веселья

я хочу совпадения как

  1. операторы до 'start'
  2. ключевое слово
  3. операторов после 'start'

Итак, в этом случае это будет группа (для 1-й строки, так как 2-я не должна совпадать) как:

  1. Заявления1
  2. 1036 * начать *
  3. Заявления2; Заявления3 конец веселья;

Спасибо.

Ответы [ 4 ]

1 голос
/ 13 марта 2009

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

(.*?) (start) ((?:(?:.*?) ;)+ (?:.*?) end fun)

В случае, если вы не знакомы с синтаксисом (? :) - они означают не захватывающие скобки. Проверьте Освоение регулярных выражений , это отличный справочник для этой темы!

0 голосов
/ 13 марта 2009

Может быть быстрее использовать

    string[] Strings = stringToSplit.Split(new char[] { ';' });
    if (Strings.Count() > 1)
    {
        // Do your stuff
    }
0 голосов
/ 13 марта 2009

Звучит так, как вы хотите, просто:

(.*)(start)(.*;.*end.*)

Это вернет список групп, которые вы перечислили.

0 голосов
/ 13 марта 2009
start ((Statements) ;)+ (Statements) end fun
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...