регулярное выражение: совпадение при отрицании набора стандартных пробелов до и после символа ‘comment’

#regex #comments

#регулярное выражение #Комментарии

Вопрос:

Я ищу регулярное выражение, которое (не) соответствовало бы символу комментария, заключенному в произвольные пробелы

Например, с ‘#’ в качестве символа комментария:

строки должны совпадать:

  code line here
   code line here
  

предполагается, что строки не совпадают:

  #code line here
 # code line here
   #   code line here
  

Итак, что-то вроде отрицания набора (ноль / * пробелы # ноль / * пробелы)

  ^(s#s)
  

Комментарии:

1. В чем проблема с вашим собственным регулярным выражением?

2. два пробела не «объединены» в один диапазон пробелов, поэтому регулярное выражение не соответствует ни одной раскомментированной строке

Ответ №1:

Следующее регулярное выражение будет соответствовать строкам, в которых нет символа «#»

 ^((?!^s #).)*$
  

Комментарии:

1. Это регулярное выражение не фиксирует строки кода, заканчивающиеся комментарием.

2. @AlexL, это не является обязательным требованием в вопросе, но я это исправил.

Ответ №2:

Может быть что-то не оптимизировано, но попробуйте это:

 ^[^#]*(?!s*#).
  

При этом будут получены все символы с начала строки, за которыми не следует spaces # комбинация.

Комментарии:

1. Рад быть полезным!

Ответ №3:

Для ваших данных примера, если поддерживается предварительный просмотр, вы могли бы использовать отрицательный предварительный просмотр, чтобы утверждать, что с начала строки то, что справа, не является символом, умноженным на 0 пробелов, за которым следует # .

Если это так, то сопоставьте всю строку.

 ^(?!s*#). $
  

Это будет соответствовать:

  • ^ Начало строки
  • (?! Негативный прогноз
    • s*# Сопоставьте 0 раз символ пробела, затем #
  • ) Завершите просмотр
  • . Сопоставьте любой символ, кроме новой строки, 1 раз
  • $ Конец строки

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