Salut J'ai ce genre de cordes et je veux obtenir Comme toto100 pour devenir toto 100 Merci pour votre aideReg Ex Ajouter un espace entre alpha et numérique dans une chaîne
Répondre
Puisque vous ne l'avez pas spécifier une langue, voici une avec Ruby:
ruby-1.9.2-p0 > "toto123".gsub(/([a-z]+)(\d+)/i, '\1 \2')
=> "toto 123"
Mais dans une autre langue, il est très similaire.
Rechercher
(?<=[a-zA-Z])(?=[0-9])
et le remplacer par un espace. Si vous voulez aussi diviser 100toto
, puis utilisez
(?<=[a-zA-Z])(?=[0-9])|(?<=[0-9])(?=[a-zA-Z])
Ce regex est à la recherche d'une position qui est juste après une lettre et juste avant un chiffre. Comme il ne doit pas correspondre, conserver et remplacer tout texte réel, mais insère juste un espace dans une position entre deux caractères, c'est assez rapide. Comme suggéré par tchrist, bien sûr, il est préférable de ne pas vous limiter aux lettres et chiffres ASCII, surtout si la langue que vous utilisez supporte Unicode dans les expressions régulières (comme le fait Java).
Ainsi, la seconde regex ressemble
(?<=\p{L])(?=\p{N})|(?<=\p{N})(?=\p{L})
En Java:
String result = subject.replaceAll("(?<=\\p{L])(?=\\p{N})|(?<=\\p{N})(?=\\p{L})", " ");
merci beaucoup – sdblepas
Vous avez * vraiment * besoin d'utiliser '\ pL' pour les lettres. Chaque fois que vous voyez quelqu'un écrire '[a-z]' ou '[A-Z]' dans une expression régulière, c'est virtuellement * toujours * faux. ''unichars -a '\ pL' '[^ a-zA-Z]' | wc -l'' renvoie ** 12,917 points de code que vous avez oublié! ** – tchrist
@tchrist: Droit. Quand la question a été posée, il n'y avait aucune mention de Java, et je n'ai pas retravaillé la réponse entière quand ce peu d'information a été ajouté. –
Pour reprendre la solution de Tim mais corrections apportées pour gérer l'ASCII de plus de 1970 - rappelez-vous, les caractères Java sont Unicode, vous avez pour tenir compte de cela - donne cette solution simple:
String new = old.replaceAll("(?x) (?<= \\pL) (?= \\pN) | (?<= \\pN) (?= \\pL)", " ");
et ce plus-maintai nable et version moins-fou:
String new = old.replaceAll(
"(?x) # enable comment mode \n"
+ " # LOOK FOR EITHER: \n"
+ " (?<= \\pL) # a letter right behind \n"
+ " (?= \\pN) # AND a number right ahead \n"
+ " | # OR ELSE \n"
+ " (?<= \\pN) # a number right behind \n"
+ " (?= \\pL) # AND a letter right ahead \n"
+ "", // placeholder so comma doesn't get lost
" "); // replaced with a single space
que je suppose que vous pourriez écrire comme ça il est donc pas indenté loin:
String new = old.replaceAll(
"(?x) # enable comment mode \n"
+ " # LOOK FOR EITHER: \n"
+ " (?<= \\pL) # a letter right behind \n"
+ " (?= \\pN) # AND a number right ahead \n"
+ " | # OR ELSE \n"
+ " (?<= \\pN) # a number right behind \n"
+ " (?= \\pL) # AND a letter right ahead \n"
+ "", // placeholder so comma doesn't get lost
" "); // replaced with a single space
C'est probablement le meilleur que vous allez être en mesure de le faire, étant donné comment horriblement mal adapté Java est à ce genre de travail. Si vous avez seulement utilisé Java, vous ne savez probablement pas à quel point c'est méchant. Ici, en comparaison est ce que la même opération ressemble dans une langue qui était en fait conçu avec regexes à l'esprit:
($new = $old) =~ s{ # LOOK FOR EITHER:
(?<= \pL) # a letter right behind
(?= \pN) # AND a number right ahead
| # OR ELSE:
(?<= \pN) # a number right behind
(?= \pL) # AND a letter right ahead
}{ }xg; # THEN insert a single space
Voir toutes les nombreuses, beaucoup différences cruciales? Simplement stupéfiant, n'est-ce pas?
I peut peut regex travailler en assembleur si je veux, aussi; en fait, j'ai. C'est à peu près aussi amusant que Java, vraiment. Faire un travail de regex à Java, c'est trop apprendre à chanter un cochon: c'est une perte de temps et cela dérange le cochon; cela agace aussi tout le monde, y compris vous.
Apprendre à utiliser le bon outil pour la bonne tâche est ce qui sépare le programmeur professionnel du code singe. La vie est trop courte pour te battre la tête contre un mur de briques.
- 1. Reg Ex négation
- 2. Format de chaîne avec Reg Ex
- 3. Preg remplacer - reg ex nécessaire
- 4. Reg Ex Django Url Conf
- 5. PHP Reg ex pour analyser un lien
- 6. reg ex numéro de téléphone
- 7. Comment ajouter des séparateurs de milliers avec reg ex?
- 8. Reg Ex - ne permet pas de zéro
- 9. Reg Ex pour correspondre à des numéros et des virgules
- 10. Différence entre la valeur numérique et chaîne dans PHP
- 11. Javascript combinant une expression reg et une chaîne
- 12. MySQL Reg ex, doivent correspondre à des phrases dans l'ordre
- 13. alpha/tableau numérique Trier mixte
- 14. reg ex newby - comment spécifiez-vous de faire correspondre un caractère sans l'inclure dans la sortie?
- 15. Besoin d'aide avec javascript reg ex - comment supprimer une partie d'une chaîne
- 16. Autoriser * dans l'expression régulière pour alpha-numérique
- 17. Ajouter un espace vertical entre les lignes dans vim
- 18. JavaScript Regex (chaîne doit inclure uniquement alpha, espace, trait d'union)
- 19. Comment ajouter un espace entre deux NSStrings concaténées?
- 20. differnce entre struct reg et struct user_regs_struc?
- 21. donné une couleur et alpha, quelle couleur et alpha à ajouter pour créer une couleur désirée?
- 22. Motif de recherche PHP correct d'un caractère dans une chaîne alpha-numérique de longueur fixe
- 23. Ajouter un espace entre un groupe ou un bouton radio
- 24. Jmeter n'extrait pas correctement la valeur avec l'extracteur reg ex
- 25. Téléchargement de fichiers C#: aucun groupe de reg ex?
- 26. extraction de chaîne Javascript/reg exp aide
- 27. comment ajouter un trait d'union entre une chaîne
- 28. Ajouter des espaces avant et après une chaîne dans ruby?
- 29. ajouter un espace char dans Typoscript
- 30. Jquery ajouter un espace vide
Votre langage de programmation est ...? Et qu'en est-il des chaînes comme: '100toto' et' 1st'? Devraient-ils également être divisés? –