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