#regex
#регулярное выражение
Вопрос:
Я хотел бы проверить все строки с форматом hostname abc_pqr_xyz
в файле. Для этого нужно регулярное выражение. В строке должно быть ровно 2 _ ‘s и 3 слова.
Я пытался использовать регулярное выражение ^hostname s .*_.*_.*
Но это дает положительный результат для abc_abc_abc_abc_abc
, поскольку оно рассматривает abc_abc_abc
как одно слово.
Комментарии:
1. Используйте
^hostnames [^_]*_[^_]*_[^_]*$
Ответ №1:
Вы можете использовать [^_]
класс отрицаемых символов, который соответствует любому символу, но _
вместо .
:
^hostnames [^_]*_[^_]*_[^_]*$
Смотрите демонстрацию регулярных выражений и график регулярных выражений:
Смотрите $
в конце, который проверяет конец строки.
Кроме того, пробел перед s
потребует пробела, а затем 1 или более символов пробела, таким образом, этот пробел может быть вредным, поэтому я удалил его из выражения.
Обратите внимание, что вы можете сгруппировать _[^_]*
, а затем установить количество повторений, которое вы можете скорректировать в будущем:
^hostnames [^_]*(?:_[^_]*){2}$
Смотрите эту демонстрацию регулярных выражений.