2012-02-15 12 views
5

Ho cercato e cercato ma non riesco a trovare la soluzione.
Ho bisogno di rimuovere i puntini nei tag di un documento XML con RegExp in C# ....RegExp, Rimuovi punti nei tag

così per esempio:

test <12.34.56>test.test<12.34> 

dovrebbe essere:

test <12346>test.test<1234> 

Quindi, in pratica rimuovendo punti ma solo nei tag .... qualche idea?

+2

C'è un motivo particolare si "necessario rimuovere ... ** con RegExp **"? – AakashM

risposta

5
resultString = Regex.Replace(subjectString, @"\.(?=[^<>]*>)", ""); 

sostituisce un punto con la stringa vuota solo se la successiva parentesi angolare è una parentesi angolare di chiusura.

Questo è naturalmente fragile poiché le parentesi angolari di chiusura potrebbero verificarsi all'interno del testo tra i tag, ma se sei sicuro che non sarà così, dovresti essere OK.

Spiegazione:

\.  # Match a dot 
(?=  # only if the following regex can be matched at the current position: 
[^<>]* # - zero or more characters except <or> 
>  # - followed by a > 
)  # End of lookahead assertion 
+0

Sì, ha funzionato molto bene! Non sono sicuro di aver capito pienamente il motivo, ma non importa fino a quando funziona :-) – NicolajB

+0

@NicolajB: Ho aggiunto una spiegazione, spero che questo aiuti. –

+0

non ha visto la spiegazione fino ad ora. Molto utile! grazie mille – NicolajB

2

vorrei utilizzare un parser XML per esso

XDocument xdoc = XDocument.Load(new StringReader("<root><s123.45><s678.9>aaaa</s678.9></s123.45></root>")); 
foreach (var elem in xdoc.Descendants()) 
    elem.Name = elem.Name.LocalName.Replace(".", ""); 
Console.WriteLine(xdoc); 
+0

Ho il brutto sospetto che sta per accadere che ciò che il richiedente ha non è in realtà xml, ma solo una stringa che capita di contenere alcune parentesi angolari. Naturalmente potrei sbagliarmi :) – AakashM

+0

Beh, è ​​un buon punto (attraversare semplicemente l'XML), ma come AakashM dice che non è veramente XML ..... o detto in un altro modo; quelli che mi hanno dato il documento pensano che sia XML .... ma non è ben formato :-) – NicolajB