2013-10-16 3 views
1

Я не могу найти код прямо Regex, чтобы соответствовать этим:Regex: соответствует только одно вхождение символа

  • tttttg должно быть истинным
  • tg должно быть истинным
  • tgg должно быть ложным
  • tttgg должно быть ошибочным
  • t должно быть правдой
  • ttt должно быть истинным
  • g должно быть ложным
  • gggg должно быть ложным

Там может быть любое количество вхождений t, но по крайней мере один, и он может необязательно иметь только g в финале. Я пробовал Match match = Regex.Match("ttgg", @"[t]+{g}|[t]+");, но он возвращает true, он должен возвращать false, потому что есть 2 из g, и может быть только один.

ответ

4

Проблема заключается в том, что с учетом входной строки, "ttgg", ваша картина будет счастливо соответствовать подстроку"ttg". Попробуйте положить start (^) и завершить ($), привязывая вокруг вашего шаблона, чтобы запретить дополнительные символы ведущего или конечного. Кроме этого, вы можете существенно просто ваш шаблон к этому:

Match match = Regex.Match("ttgg", @"^t+g?$") 

это будет соответствовать:

  • начала строки (^)
  • один или несколько t символов
  • факультативно g знак
  • конец строки
+0

спасибо, что он сработал отлично –

1

Регулярное выражение для использования является: "\bt\b|t+g\b|\bt+\b"

\bt\b соответствует одинокий т - границу слова, «т», граничное слово. t+g\b соответствует остатку - одному или нескольким 't' и одному и только g.

Я предполагаю, что ваши цели не обязательно начинаются в начале линии.

+0

Вы правы, я обновил ответ –

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