2010-06-19 10 views
0

vide Vu le code:Comment remplacer le

import clr 
clr.AddReference('System') 

from System.Text.RegularExpressions import * 

def ReplaceBlank(st): 
    return Regex.Replace(
     st,r'[^a-z\s](\s+)[^a-z\s]', 
     lambda s:s.Value.Replace(' ', ''),RegexOptions.IgnoreCase) 

je me attends à l'entrée ABC EDF pour revenir ABCDEF mais il ne fonctionne pas, qu'est-ce que je fait de mal? Le paramètre ignorer-case set correspond à n'importe quel caractère autre que les lettres et les caractères d'espaces.

+0

Désolé Konrad Rudolph, je pense que nous avons édité en même temps hehe ** rollback ** –

+0

@Koning: Stack Overflow devrait probablement distribuer des verrous pour les modifications simultanées pour éviter les mises à jour perdues ... eh bien. –

Répondre

1

[^a-z\s]^ au début d'une classe de caractères (la chose entre []) annule la classe de caractères.

Pour remettre en place des blancs, vous pouvez simplement remplacer \s+ avec des chaînes vides ou, si vous devez faire correspondre uniquement des lettres remplacent

(?<=[a-z])\s+(?=[a-z]) 

avec une piqûre vide. La deuxième expression régulière correspondra à la chaîne d'espaces entre deux lettres; pour tenir compte de début/fin de cordes, utilisez

(?<=(^|[a-z]))\s+(?=($|[a-z])) 

ou

\b\s+\b 

La seconde correspondra à des espaces entre deux limites de mots, qui comprennent les caractères de symboles comme période, virgule, tiret, etc.