#ruby #regex #gsub
#ruby #регулярное выражение #gsub
Вопрос:
Возможно ли использовать отрицательные соответствия в выражениях gsub? Я хочу заменить строки, начинающиеся на, hello
кроме тех, которые начинаются на hello Peter
my-string.gsub(/^hello@/i, '')
Что я должен поставить вместо @
?
Комментарии:
1. Ваш вопрос неясен. Если строка начинается с «hello», где она заканчивается? Я полагаю, вы имеете в виду не просто строку «hello».
2. Извините, я думаю, что «строки, начинающиеся с», означают любую строку, которая начинается с этого шаблона, и не указывают, что идет после этого… любое предложение, чтобы сделать его более понятным, и я отредактирую его для записи.
3. Начальная часть понятна. Что неясно, так это то, где это заканчивается. Вас просто интересуют строки «hello» или строки, начинающиеся с «hello» и продолжающиеся на некоторую длину? Я думал, вы хотите последнее, и если это так, следующий ответ будет подходящим. Если вы хотели просто «привет», то ответ Майкла хорош.
4. Я имею в виду последнее, хотя простое «привет» (поскольку за ним не следует «питер») также должно соответствовать. Возможно, я что-то упускаю, но, кроме положения пробела, оба ответа кажутся мне правильными… Ответ Майкла улавливает строки любой длины и количества слов для меня.
5. Майкл будет работать с поиском, но пропустит пару случаев.
We are martians and we say 'hello peter' all the time
будет соответствовать.hello
один не будет соответствовать.
Ответ №1:
Звучит так, как будто вам нужен негативный прогноз:
>> "hello foo".gsub(/hello (?!peter)/, 'lala ') #=> "lala foo"
>> "hello peter".gsub(/hello (?!peter)/, 'lala ') #=> "hello peter"
Комментарии:
1. 1, отрицательные поисковые окна не так интуитивно понятны. Приятно видеть простой пример.
2. О да, это оно 🙂 Спасибо, Майкл!
3. Отлично, еще одно голосование против без объяснения причин. Если у вас фактическая проблема с ответом, почему бы не дать отзыв?
4. Майкл, смотри Следующий комментарий в комментариях к вопросу. Небольшого исправления будет достаточно. В любом случае, это было полностью полезно для меня, спасибо!
5. dgilperez: Я видел комментарий, но я не думаю, что он заслуживает отрицательного голосования. В любом случае, мы даже не уверены, что это был его, и, в конце концов, это действительно не имеет значения, если на ваш вопрос был дан ответ.
Ответ №2:
Как сказал Майкл, вам нужен негативный прогноз.
Для вашего примера это что-то вроде:
my_string.gsub(/^hello(?! peter)( .*|$)/i, '')
Это заменит в таких случаях, как:
"hello"
"hello Mom"
"hello "
"hello Mom and Dad"
И будет игнорировать такие вещи, как:
"hello Peter"
"hello peter"
"hellomom"
"hello peter and tom"