À partir d'une base de données Oracle 11g, à l'aide de SQL, je dois supprimer la séquence suivante de caractères spéciaux d'une chaîne, c'est-à-dire.
~!@#$%^&*()_+=\{}[]:”;’<,>./?
Si l'un de ces caractères existe dans une chaîne, à l'exception de ces deux caractères, que je ne veux PAS supprimer, c'est-à-dire: "|"
et "-"
, j'aimerais les supprimer complètement.
Par exemple:
De: 'ABC(D E+FGH?/IJK LMN~OP'
À: 'ABCD EFGHIJK LMNOP'
après suppression des caractères spéciaux.
J'ai essayé ce petit test qui fonctionne pour cet échantillon, à savoir:
select regexp_replace('abc+de)fg','\+|\)') from dual
mais y a-t-il un meilleur moyen d'utiliser ma séquence de caractères spéciaux ci-dessus sans utiliser ce modèle de chaîne de '\+|\)'
pour chaque caractère spécial utilisant Oracle SQL?
Merci.
Vous pouvez remplacer autre chose que des lettres et de l'espace par une chaîne vide
[^a-zA-Z ]
voici démo en ligne
Comme ci-dessous commentaires
J'ai toujours besoin de conserver les deux caractères spéciaux suivants dans ma chaîne, c'est-à-dire "|" et "-".
Juste exclure plus
[^a-zA-Z|-]
Remarque: trait d'union -
doit figurer au début ou à la fin ou être échappé comme \-
car il a une signification particulière dans la classe Character pour définir une plage.
Pour plus d'informations, lisez à propos de Classes de caractères ou jeux de caractères
La regex correspondant à votre séquence de caractères spéciaux est:
[]~!@#$%^&*()_+=\{}[:”;’<,>./?]+
Je pense que vous manquez encore d’échapper à tous les caractères spéciaux pour les expressions rationnelles. Pour ce faire, procédez de manière itérative: Créez un test et commencez à construire caractère par caractère votre chaîne d’expression régulière pour voir si cela supprime ce que vous attendez d'être supprimé. Si le dernier personnage ne fonctionne pas, vous devez y échapper. Cela devrait faire l'affaire.
SELECT TRANSLATE('~!@#$%sdv^&*()_+=\dsv{}[]:”;’<,>dsvsdd./?', '~!@#$%^&*()_+=\{}[]:”;’<,>./?',' ')
FROM dual;
résultat:
TRANSLATE
-------------
sdvdsvdsvsdd
Pensez à utiliser ce remplacement d'expression régulière à la place:
REGEXP_REPLACE('abc+de)fg', '[~!@#$%^&*()_+=\\{}[\]:”;’<,>.\/?]', '')
Le remplacement correspondra à n'importe quel caractère de votre liste.
Voici une démo regex !