Bonjour a tous,
Je cherche a effectué un remplacement dans une chaîne (je converti une formule d'un langage vers un autre langage).
Je veux convertir les symboles <> et /= par !=
Malheureusement, il ne faut pas que je convertisse c'est symbole si il ce trouve au sein d'une chaine.
Voici quelque exemple:
1 2 3 4 5 6 7 8 9
|
"sdf" <> sdf --> "sdf" != sdf
qsd<>"sdf" --> qsd!="sdf"
"qsd<>sdqf" --> "qsd<>sdqf"
"<>" --> "<>"
"/=" --> "/="
"sdf" /= sdf --> "sdf" != sdf
qsd /= "sdf" --> qsd != "sdf"
"qsd /= sdqf" --> "qsd /= sdqf" |
Donc pour ce faire, j'utilise
1 2 3
|
tr1::basic_regex<TCHAR> diffRegex(_T("\"\\s*(<>|/=)\\s*[^\"]|[^\"]\\s*(<>|/=)\\s*\""),tr1::regex_constants::icase );
formula=tr1::regex_replace(formula,diffRegex,basic_string<TCHAR>(_T(" != "))); |
Cette regex fonctionne "presque bien". Les supprime en plus un caractère avant et après les symbole <> et /=
exemple:
"sdf"<>sdf --> "sdf != df
Donc ma question est: Comment corriger cette regex ?
Je vous remercie d'avance pour votre aide 
EDIT: j'ai essayé une autre regex qui prend le problème en sens inverse mais celle-ci aussi pose problème:
1 2
| tr1::basic_regex<TCHAR> diffRegex(_T("(?!\"[\\d\\w]*\\s*)(<>|/=)(?!\\s*[\\d\\w]*\")"),tr1::regex_constants::icase );
formula=tr1::regex_replace(formula,diffRegex,basic_string<TCHAR>(_T(" != "))); |
Elle fonction bien sauf dans le cas ou le contenu entre cote est a droite
sdf <> "dsfg" --> ne fonctionne pas
Donc avez vous une idée pour corrigé l'une ou l'autre ?
Partager