Regex - сопоставить любые символы и разрешить любое количество пробелов. Перерыв матча на двойной пробел - PullRequest
0 голосов
/ 18 марта 2020

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

  • "Адам Ламберт"
  • "Мистер Адам Ламберт"
  • "adam@test.com"

Но не соответствует следующему

  • "Адам Ламберт"
  • "Адам Ламберт"

Правила:

  • Любой символ alphanumeri c должен совпадать
  • Должен совпадать один пробел в любой точке.
  • Может совпадать любое количество пробелов
  • двойные пробелы не совпадают
  • один пробел в конце строки не совпадает

РЕДАКТИРОВАТЬ

Мне также нужно соответствовать следующему. Извините, что пропустил это.

name:((\w+(?:\S\w+)*|\s(?:\w+\S)*)\S)*

Мне нужно соответствовать:

  • имя:
  • имя: A
  • имя: Адам Ламберт

Приведенное выше регулярное выражение соответствует "name: Ad ...", но не соответствует "name: A"

Ответы [ 2 ]

1 голос
/ 18 марта 2020

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

^\S+(?: \S+)*$
1 голос
/ 18 марта 2020
^(?:\S+(?:\s\S+)*|\s(?:\S+\s)*)\S$

Значение:

  • ^ начало строки
  • (?: Группа без захвата
  • \ S + один или несколько непробельных символов
  • (?: \ S \ S +) * ноль или более групп одного пробела и одного или нескольких непробельных символов

или (|)

  • ^ начало строки
  • \ s один символ пробела
  • (?: \ S + \ s) * ноль или более групп непробельных символов и один символ пробела
  • ) конец группы без захвата

Наконец, один непробельный символ \ S и конец строки: $.

В третьем примере символ @ не будет соответствует \ w, но будет, если вы измените его на \ S (любой непробельный символ)

Смотрите его в действии здесь: regexr.com/50lp2

edit: я не могу тип

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