Необязательное регулярное выражение для группы не работаетC#

Место общения программистов C#
Ответить
Anonymous
 Необязательное регулярное выражение для группы не работает

Сообщение Anonymous »

У меня есть следующее предложение

Код: Выделить всё

#bb John can #20 jiang stone [voila]
Я хочу, чтобы мое регулярное выражение C# давало мне 5 совпадений с моими группами

Код: Выделить всё

#bb
John Can
20
jiang stone
voila
Из которых токены в позициях #bb и вуаля являются необязательными.

Я использовал следующее регулярное выражение, которое хорошо работает в предложении, в котором нет первого #bb - например,

Код: Выделить всё

John can #20 jiang stone [voila]
дает мне 4 правильных токена с выражением

Код: Выделить всё

@"(.*)#(\d+)(.*\s)(?:\[(.*)\])?"
Однако, когда я расширяю это с помощью

Код: Выделить всё

@"(?:#[a-zA-Z])?(.*)#(\d+)(.*\s)(?:\[(.*)\])?"
Это не работает. #bb в начале предложения не сопоставляется как отдельный токен — вместо этого я получаю совпадение как

Код: Выделить всё

b John Can
Я попробовал несколько вариантов, но ни один из них не дал мне необязательного соответствия первому совпадению #... Я хочу, чтобы это могло быть #{1 или 2 символа}, и это может быть необязательно. Оно может быть у меня, а может отсутствовать, и в этом случае остальные должны вернуть токены.

Что не так с моим регулярным выражением?

Спасибо за помощь

Подробнее здесь: https://stackoverflow.com/questions/985 ... oesnt-work
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»