Regex, получить полную строку перед определенным знаком или получить полную строку, если она не содержит знака - PullRequest
1 голос
/ 18 марта 2019

Есть ли способ получить всю строку (включая другой знак, например -,) перед данным конкретным знаком (в данном случае знаком «@»)?

Пример домен \ имя пользователя @ abc Я хочу получить " домен \ имя пользователя ", поэтому я использую выражение (.+)@, и оно работает.

но в то же время будут входные данные без @abc только "домен \ имя пользователя", поэтому разделять его не нужно, (. +) Будет работать

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

  1. Домен \ username@abc.com return Домен \ username
  2. Домен \ возвращение имени пользователя Домен \ имя пользователя

В ТО ЖЕ ГРУППЕ

Мое решение состоит в том, чтобы создать выражение if-else перед выражением regex, чтобы оно могло решить, содержит ли строка знак @, поэтому я могу применять разные выражения для обеих ситуаций.

Я пытался

  1. Используйте или (|), чтобы конец строки был @ или границей слова: (. +) (@ | \ B) -> всегда совпадает с \ b, поэтому не будет останавливаться на знаке '@'
  2. Сделать @ знак совпадения 0 или 1 раз: (. +) @ {0,1} - >> Я не понимаю, почему это не работает. Но это не работает в regex101.com, оно всегда будет соответствовать полной строке

1 Ответ

2 голосов
/ 18 марта 2019

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

^[^@]+

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

Она будет соответствовать одному или нескольким символам, отличным от @ ([^@]+) наначало строки (^).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...