Я хочу сопоставить все знаки препинания в моем регулярном выражении, кроме апострофов. Как мне это сделать в Ruby?

#ruby #regex

#ruby #регулярное выражение

Вопрос:

Пока это мой код:

 def alternate_words(string)
    string.gsub(/[p{P}]/, "")
end
  

Я ищу способ добавления исключений к моим регулярным выражениям. Возможно ли это или я должен перечислить их все?

Ответ №1:

 string = "jack. o'reilly? mike??!?"
puts string.gsub(/[p{P}amp;amp;[^']]/, '')
# => jack o'reilly mike
  

Документы:

Символьный класс может содержать другой символьный класс. Само по себе это бесполезно, потому что [a-z[0-9]] описывает тот же набор, что и [a-z0-9] . Однако символьные классы также поддерживают amp;amp; оператор, который выполняет пересечение множеств для своих аргументов.

Итак, [p{P}amp;amp;[^']] это «любой символ, который является знаком препинания, а также не является апострофом».

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

1. другой способ: [^P{P}']

2. Да, решение @CasimiretHippolyte тоже должно сработать.