J'ai une corde comme "AAA 101 B202 C 303" et je veux me débarrasser de l'espace entre le char et le numéro s'il y en a. Donc, après l'opération, la chaîne devrait être comme "AAA101 B202 C303". Mais je ne suis pas sûr que Regex puisse faire cela? P>
Toute aide? Merci d'avance. P>
4 Réponses :
Vous pouvez faire quelque chose comme et remplacer par p> L'expression peut être serrée, mais ce qui précède devrait fonctionner pour Votre exemple de chaîne d'entrée. p> Ce qu'elle fait est de déclarer un groupe contenant des lettres (premier jeu de paranthèses), puis un espace optionnel (\ S?), puis un groupe de chiffres (\ D +). Les groupes peuvent être utilisés dans le remplacement en faisant référence à leur index. Lorsque vous souhaitez vous débarrasser de l'espace, il suffit de remplacer par 1 $ 2 $. P> p>
Pourquoi rendre l'espace facultatif? Après tout, c'est ce que c'est tout à propos.
Oui, vous pouvez le faire avec des expressions régulières. Voici un exemple court mais complet: (si vous voulez le faire beaucoup, vous voudrez peut-être compiler une expression régulière pour le motif.) P> Le \ p {l} code> correspond à une lettre unicode - Vous voudrez peut-être être plus restrictif. P> p>
Bien que pas aussi concis que Regex, le code C # pour quelque chose comme celui-ci est assez simple et très rapide:
Juste pour le plaisir (parce que l'acte de programmation est / devrait être amusant parfois): o) J'utilise linq avec agrégate A >: var result = text.Aggregate(
string.Empty,
(acc, c) => char.IsLetter(acc.LastOrDefault()) && Char.IsDigit(c) ?
acc + c.ToString() : acc + (char.IsWhiteSpace(c) && char.IsLetter(acc.LastOrDefault()) ?
string.Empty : c.ToString())).TrimEnd();