2016-09-19 8 views
0

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

  1. начинается с [аз] +
  2. заканчивается [AZ] +
  3. между могут иметь 'или - или оба, столько раз, сколько пользователь любит [' -] *
  4. 'должен не быть последовательным, аналогичным образом - не должно быть последовательным.

благодарит за любую помощь заранее.

+0

Это может быть проще сделать что-либо с нормальными строками функций или с отдельными регулярными выражениями ... вы, вероятно, _could_ построить выражение делать то, что вы хотите, но отдельные заявления будут гораздо более читабельными и поддерживаемыми, а не для большинства случаев использования. –

+0

@ 4castle Это не работает. –

+0

Я просто попробовал его в Regex101. Это не сработало. –

ответ

2
^(?!.*(?:''|--))[a-z][a-z'-]*[a-z]$ 

Для этого можно добавить lookahead.See demo.

https://regex101.com/r/wV5bD0/2

Если длина может быть 1 или 2 вы используете

^(?!.*(?:''|--))(?=[a-z])[a-z'-]+(?<=[a-z])$ 
+0

Спасибо, vks, это сделало трюк для меня. можете ли вы сломать его, чтобы я мог понять, как это работает. спасибо в любом случае – ahsant

+0

@ahsant Единственное, что я добавил, это 'lookahead', который утверждает, что он не должен совпадать, если он находит consective' '' 'или' --' – vks

+1

Если минимальная длина может быть меньше 3 (vx regex требует не менее 3) вы можете использовать шаблон '^ (?!. * (?: '' | -)) \ b [a-z '-] + \ b $', чтобы разрешить 1 или более. –