2009-03-13 2 views
0

Мне нужна помощь с регулярным выражением. Я хочу получить строку с разделителем в ней между двумя конкретными словами.C# regex, чтобы соответствовать строке с разделителем

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

Statementments1 start Statementments2; Выражения 3:

Между «началом» и «концом» может быть несколько случаев «;».

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

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

Кроме того, «конец» должен быть первым «конец» встречается после «старта»

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

statements1 начать Statements2 конец Statements3; конец весело

я хочу матчи как

  1. заявления перед «начала»
  2. ключевого слова
  3. заявления после того, как «старт»

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

  1. Заявления1
  2. начало
  3. Утверждения2; Выражения 3:

Спасибо.

ответ

1

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

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

В случае, если вы не знакомы с (? :) - они означают не захватывающие круглые скобки. Отъезд Mastering Regular Expressions, это отличная ссылка на эту тему!

+0

Да, я знаком с синтаксисом?:. Но я сожалею, что это регулярное выражение не работает. – Archie

0
start ((Statements) ;)+ (Statements) end fun 
+0

Это не соответствует требованиям к захвату –

+0

Да, это так, регулярное выражение для не было задано ... – leppie

+0

Хорошо, это не так, исходный вопрос был изменен ... – leppie

0

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

string[] Strings = stringToSplit.Split(new char[] { ';' }); 
    if (Strings.Count() > 1) 
    { 
     // Do your stuff 
    } 
+0

спасибо, но я хочу только регулярное выражение. – Archie

0

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

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

Это будет возвращать группы, которые перечисляют.

+0

Вам нужны не-жадные отборочные на вашем *, или он будет соответствовать последнему «концу», а не первым. –

+0

Вы абсолютно правы, хотя замена ленивых * приводит к группировке финальной «забавы»; со следующим матчем. Не знаю, насколько это важно. –

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