Регулярно определяйте, являются ли все символы в слове одинаковыми, например c - PullRequest
1 голос
/ 19 марта 2020

У меня есть набор слов, приходящих одно за другим, например: aa, @ #, ???, ~~~,? ~ Et c

Мне нужно регулярное выражение, чтобы найти одно из этих слова содержат только? или только ~. Из приведенных выше примеров ввода, ??? и ~~~ должны совпадать, но не другие.

Я пробовал ^[\s?]*$ и ^[\s~]*$ отдельно, и это работает, я пытаюсь объединить их. ^[\s?||~]*$ не работает, поскольку он также распознает? ~ Как действительный.

Любая помощь?

Ответы [ 3 ]

2 голосов
/ 19 марта 2020

Вы можете использовать это регулярное выражение, которое ищет строку, начинающуюся с ~ или ?, а затем утверждает, что все остальные символы в строке совпадают с первым символом, использующим обратную ссылку (\1 ):

 ^([~?])\1+$

Демонстрация на regex101

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

Вам нужно использовать обратную ссылку для достижения желаемого результата.

Если вы хотите только ~ или ?, используйте

^([~?])\1+$

Если вы хотите любой повторяющийся шаблон, используйте

^(.)\1+$

Пояснение (.) или ([~?]), захватившее первого персонажа. Затем \1+ проверка первого персонажа, один или несколько раз (обратная ссылка)

0 голосов
/ 19 марта 2020

Вы хотите сопоставить строки, которые начинаются и заканчиваются любым числом тильды или вопросительного знака. Это было бы ^\(~\|?\)*$. Круглые скобки, чтобы сделать группу, и вертикальная черта, чтобы сделать 'или', должны быть backsla sh экранирован.

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