Je suis en train de supprimer des lettres à partir d'une chaîne. Serait-ce faire:
c = o.replace(o.gsub!(/\W+/, ''))
pouvez-vous être un peu plus descriptive, vous voulez seulement un-z? ou les espaces et certains symboles, mais pas les chiffres?
OriginalL'auteur newbie_86 | 2011-03-24
Juste
gsub!
est suffisante:Noter que
gsub!
modifie leo
objet. Aussi, si leo
ne contient pas de tout non-caractères de mot, le résultat seranil
, donc, en utilisant la valeur de retour comme la chaîne modifiée n'est pas fiable.Vous voulez probablement ceci à la place:
Le
!
version modifie l'original (c'est ce que l'!
-- c'est une sorte de "attention, je vais changer l'objet que vous m'a appelé sur" s'inscrire). La version sans la!
(comme dans mon deuxième exemple de code) est-ce que vous voulez, il ne modifie pas la chaîne en place, mais renvoie une copie avec les remplacements appliquéeOriginalL'auteur Cameron
Supprimer tout ce qui n'est pas une lettre:
EDIT: comme d'ikegami points, cela ne prend pas en compte les caractères accentués, les accents et autres caractères similaires. La solution à ce problème dépend exactement ce que vous êtes en se référant à "une lettre". Aussi, ce que votre entrée sera.
J'espère qu'ils ne sont pas les utilisateurs de ce type de logiciel. D'autre part, vous avez raison sur ce point.
OriginalL'auteur edmz
Qui fonctionne la plupart des cas, sauf lorsque
o
initialement ne contiennent pas de non-lettre, dans ce casgsub!
sera de retournil
.Si vous voulez juste remplacé la chaîne, il peut être plus simple:
OriginalL'auteur sawa
À l'aide de
\W
ou\w
pour sélectionner ou de supprimer uniquement les caractères ne fonctionnent pas.\w
A-Z, a-z, 0-9, et "_":Donc, le décapage à l'aide de
\W
préserve des chiffres et des caractères de soulignement.Si vous souhaitez faire correspondre les caractères utilisent
/[A-Za-z]+/
, ou les caractères POSIX classe[:alpha:]
, c'est à dire/[[:alpha:]]+/
, ou/\p{ALPHA}/
.Le format final est la propriété Unicode pour 'A'..'Z' + 'a'..'z' en ASCII, et obtient prolongée lorsque vous traitez avec Unicode, donc si vous avez des caractères multioctets vous devriez probablement utiliser.
OriginalL'auteur the Tin Man
Gardez à l'esprit que ruby considère le trait de soulignement
_
être un caractère de mot. Donc, si vous voulez garder souligne ainsi, cela devrait le faireSinon, vous avez besoin pour ce faire:
OriginalL'auteur Marco Prins
utiliser Regexp#union pour créer un gros objet correspondant
OriginalL'auteur boulder_ruby
Je ne vois pas ce que
o.replace
est là pour vous si vous avez une chaîne:Et vous n':
Vous bénéficiez de:
Si vous voulez vous débarrasser du nombre de caractères trop, vous pouvez le faire:
Et vous obtenez:
OriginalL'auteur fengolly