Альтернативное регулярное выражение с -SDR? - PullRequest
1 голос
/ 07 ноября 2019

В моем c # есть следующее регулярное выражение:

(?<!\w)M20A\w+

Фактический код:

string regex = $@"(?<!\w){prefix}\w+";

Обратите внимание, что префикс var соответствует строкам, таким как M20A и X50G.

Он идеально подходит для следующих случаев:

M20A0820
M20A1234
M20A7U8V

Но теперь я получил новое требование от бизнеса, например:

M20A-SDR

Это будет префикс, за которым следуетточная строка "-SDR". Не просто тире, за которой следуют 3 буквенно-цифровых символа, а буквально "-SDR". Существующие совпадения все еще должны работать, но префикс + "-SDR" также должен совпадать.

Какое регулярное выражение будет соответствовать следующему:

M20A0820
M20A1234
M20A7U8V
M20A-SDR

Заранее спасибо.

1 Ответ

1 голос
/ 07 ноября 2019

Вы можете использовать

string regex = $@"(?<!\w){prefix}\w*(?:-SDR)?";

См. Демонстрационную версию regex .

Или, чтобы сопоставить как целое слово, вы можете использовать границы слов:

string regex = $@"\b{prefix}\w*(?:-SDR)?\b";

См. это демонстрационное выражение регулярного выражения

Граница слова \b в начале будет работать, если все значения в prefix начинаются со слова char, буквы,цифра или _. Граница слова в конце будет иметь смысл, если после -SDR не будет больше символов слова.

(?:-SDR)? будет соответствовать строке -SDR оптонально.

Подробности

  • \b - граница слова
  • M20A - буквенная строка
  • \w* - 0+ слов символов
  • (?:-SDR)? - группа без захвата, которая соответствует 1 или 0 раз (поскольку после нее ?) и -SDR подстрока
  • \b - граница слова.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...