У меня возникли проблемы с сопоставлением одной строки с другой, если строка, которую я тестирую, содержит символы регулярных выражений.Сопоставьте подстроку, которая может содержать зарезервированные символы
Фон: Я работаю над скриптом, который переносит статьи новостей из 2 устаревших систем в один. В некоторых случаях эти истории дублируются внутри систем, поэтому я запускаю скрипт для проверки сохраненных данных в архиве (в форме html), чтобы узнать, соответствует ли название текущей истории чему-либо в архиве.
#...(for each line)
line.match(title) then
return true
end
Это обычно работает, за исключением того, когда у меня есть регулярное выражение символ в названии, например:
<span class="title">$8.9 Million Grant for UC Center Focused on Occupational Safety and Health</span>
не соответствует
$8.9 Million Grant for UC Center Focused on Occupational Safety and Health
Вот пример вывода из IRB в продемонстрировать
2.3.0 :012 > str = '<span class="title">$8.9 Million Grant for UC Center Focused on Occupational Safety and Health</span>'
2.3.0 :020 > str.match("$8.9 Million Grant for UC Center Focused on Occupational Safety and Health")
=> nil
2.3.0 :021 > str.match("\\$8.9 Million Grant for UC Center Focused on Occupational Safety and Health")
=> #<MatchData "$8.9 Million Grant for UC Center Focused on Occupational Safety and Health">
2.3.0 :022 > str.match("8.9 Million Grant for UC Center Focused on Occupational Safety and Health")
=> #<MatchData "8.9 Million Grant for UC Center Focused on Occupational Safety and Health">
2.3.0 :023 >
Итак, я уверен, что проблема $
является проблемой, и проблема связана с тем, что она является рекурсивным символом регулярного выражения.
Ruby не является моим повседневным языком, и у меня возникают проблемы с тем, чтобы посмотреть, есть ли метод ruby для выполнения матча, не полагаясь на регулярное выражение, или обрабатывать шаблон буквально, или автоматически избегать специальных символов регулярного выражения. Помощь приветствуется.
Вы приняли первый ответ, предложенный всего через 15 минут ?? –
Это сработало, и это было кратким. – bstockwell
Есть несколько причин для ожидания (хотя бы пару часов, скажем), прежде чем выбрать ответ. Во-первых, ранний отбор может препятствовать другим ответам. В этом случае, если @philomony не предложили ответа (и никто другой не дал ответ)? Во-вторых, это замыкает те, кто все еще готовит ответы. В-третьих, выбранный ответ иногда ошибочен, и вы не хотите препятствовать членам его проверять. Более того, я не знаю, как правильно выбрать ответ. –