2017-02-08 12 views
2

Ich habe dieses Stück Code:Python ersetzt ganzes Wort einschließlich anfänglichen Sonderzeichen

import re 


variable_to_be_replaced = '$VAR' 
value_to_set = 'success' 
sample_string = '$VAR VAR $$VAR $VAR1 $VAR1$VAR$VAR2 $VAR' 

print re.sub(r'\b' + variable_to_be_replaced + r'\b', value_to_set, sample_string) 

ich die Ausgabe 'success VAR $success $VAR1 $VAR1success$VAR2 success' sein möchte und ich kann nur die print-Anweisung ändern. Ich weiß, dass das nicht funktioniert, weil der Variablenname mit $ beginnt. Die Trennzeichen sollten die regulären Worttrennzeichen sein (minus 1 Start $ -Symbol).

Irgendwelche Ideen?

Antwort

2

können Sie erreichen, was Sie mit diesem RegEx wollen:

\$VAR(?=[\s\$]|$) 

Welche ‚$ VAR‘ findet, wenn ein Raum oder ein $, nachdem es dort ist. Genauer gesagt verwende ich Positive Lookahead, um Teile der Zeichenfolge zu identifizieren, die '$ VAR', '$ VAR $' sind, oder wenn '$ VAR' das Ende der Zeichenfolge ist, und dann ersetze ich nur den '$ VAR' Teil von das stimmt mit der Substitutionszeichenfolge überein.

Überprüfen Sie es hier auf regex101 mit der Ersetzung. Output

:

success VAR $success $VAR1 $VAR1success$VAR2 success 

Lassen Sie mich wissen, ob das hilft!

2

Sie können es mit negativem Blick tun voraus wie so:

import re 

s_str = '$VAR VAR $$VAR $VAR1 $VAR1$VAR$VAR2 $VAR' 
print re.sub(r'\$VAR(?!\d)', r'success', s_str) 

Ausgang:

success VAR $success $VAR1 $VAR1success$VAR2 success 

Regex:

\$VAR(?!\d) - Suche nach '$VAR' mit negativem Vorgriff von Ziffernzeichen

Demo: https://regex101.com/r/EgXlcD/1

Verwandte Themen