Удалить все не алфавитные, нечисловые символы из строки? - PullRequest
6 голосов
/ 12 февраля 2012

Если бы я хотел удалить такие вещи, как:!включают буквы с диакритическими знаками, включая à или ç.

Ответы [ 5 ]

17 голосов
/ 12 февраля 2012

Вы должны использовать регулярное выражение с правильным свойством символа.В этом случае вы можете инвертировать класс Alnum (алфавитный и числовой символ):

"◊¡ Marc-André !◊".gsub(/\p{^Alnum}/, '') # => "MarcAndré"

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

"◊¡ Marc-André !◊".gsub(/[^\p{Alnum}\p{Punct}]/, '') # => "¡MarcAndré!"

Для всех свойств символов вы можете обратиться к doc .

3 голосов
/ 12 февраля 2012

Следующее будет работать для array:

z = ['asfdå', 'b12398!', 'c98347']
z.each { |s| s.gsub! /[^[:alnum:]]/, '' }
puts z.inspect

Я позаимствовал предложенный Джереми regex.

3 голосов
/ 12 февраля 2012
string.gsub(/[^[:alnum:]]/, "")
1 голос
/ 12 февраля 2012

Если у вас действительно есть массив (как вы заявляете), и это массив строк (я предполагаю), например,

foo = [ "hello", "42 cats!", "yöwza" ]

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

Если первое (вы хотите «очистить» каждую строку массива), вы можете выполнить одно из следующих действий:

foo.each{ |s| s.gsub! /\p{^Alnum}/, '' }     # Change every string in place…
bar = foo.map{ |s| s.gsub /\p{^Alnum}/, '' } # …or make an array of new strings
#=> [ "hello", "42cats", "yöwza" ]

Если последнее (вы хотите выбрать подмножество строк, каждая из которых соответствует вашим критериям удержания только буквенно-цифровых символов), вы можете использовать один из них:

# Select only those strings that contain ONLY alphanumerics
bar = foo.select{ |s| s =~ /\A\p{Alnum}+\z/ }
#=> [ "hello", "yöwza" ]

# Shorthand method for the same thing
bar = foo.grep /\A\p{Alnum}+\z/     
#=> [ "hello", "yöwza" ]

В Ruby регулярные выражения в форме /\A………\z/ требуют соответствия всей строки, так как \A привязывает регулярное выражение к началу строки и \z привязывает к концу.

1 голос
/ 12 февраля 2012

Вы можете рассмотреть регулярное выражение.

http://www.regular -expressions.info / ruby.html

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

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

[^.!,^-#]

Это скажет вам, если не один из символов в скобках. Тем не менее, я предлагаю вам посмотреть регулярные выражения, вы можете найти лучшее решение, если вы знаете их синтаксис и использование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...