Выберите строку в регулярном выражении с ruby

Я должен очистить строку, переданную в параметре, и удалить все строчные буквы и все специальные символы, кроме:

  • +
  • |
  • ^
  • пространство
  • =>
  • <=>

так что я получил эту строку в параметре:

aA azee + B => C=

и мне нужно очистить эту строку, чтобы получить такой результат:

A + B => C

я делаю

string.gsub(/[^[:upper:][+|^ ]]/, "")

выход: "A + B C"

Я не знаю как выбрать => (и для <=>) Строка с регулярным выражением в рубине)

Я знаю, что если я добавлю string.gsub (/ [^ [: upper:] [+ | ^ =>]] /, "") в мое регулярное выражение, последний = в моей строке переданный в параметре тоже будет выбран

2 ответа

Решение

Вы можете попробовать альтернативный подход: сопоставить все, что вы хотите сохранить, а затем присоединиться к результату.

Вы можете использовать это регулярное выражение, чтобы соответствовать всему, что вы хотите сохранить:

[A-Z\d+| ^]|<?=>

Как вы можете видеть, это просто использование | а также [] создать список строк, которые вы хотите сохранить: прописные, цифры, +, |, пробел, ^, => и <=>.

Пример:

"aA azee + B => C=".scan(/[A-Z\d+| ^]|<?=>/).join()

Выход:

"A  + B => C"

Обратите внимание, что между "A" и "+" есть 2 последовательных пробела. Если вы не хотите, чтобы вы могли позвонить String#squeeze,

Смотрите регулярное выражение в использовании здесь

(<?=>)|[^[:upper:]+|^ ]
  • (<?=>) Захватывает <=> или же => в группу захвата 1
  • [^[:upper:]+|^ ] Соответствует любому символу, который не является заглавной буквой (так же, как [A-Z]) или же +, |, ^ или пробел

Смотрите код в использовании здесь

p "aA azee + B => C=".gsub(/(<?=>)|[^[:upper:]+|^ ]/, '\1')

Результат: A + B => C

r = /[a-z\s[:punct:]&&[^+ |^]]/

"The cat, 'Boots', had 9+5=4 ^lIVEs^ leF|t.".gsub(r,'')
  #=> "T  B  9+54 ^IVE^ F|"

Регулярное выражение гласит: "Сопоставьте строчные буквы, пробелы и знаки препинания, которые не являются символами. '+', ' ', '|' а также '^'. &&внутри класса символов есть оператор пересечения множества. Здесь он пересекает набор символов, соответствующихa-z\s[:punct:] с теми, которые соответствуют [^+ |^]. (Обратите внимание, что сюда входят пробелы, кроме пробелов.) Для получения дополнительной информации выполните поиск по запросу "классы символов также поддерживают оператор &&" в Regexp.

Я не включил '=>' а также '<=>' как те, в отличие от '+', ' ', '|' а также '^', являются многосимвольными строками и поэтому требуют другого подхода, чем простое удаление определенных символов.

Другие вопросы по тегам