[Python-de] Backslash in regular expressions
Peter Otten
__peter__ at web.de
Mit Jun 8 21:24:43 CEST 2005
Am Mittwoch, 8. Juni 2005 17:00 schrieb Bernd Viehmann:
> ich habe zwar schon mal was von einem raw-string gehört, um das Problem
> mit Backslashes bei Regular Expressions zu umgehen aber : Wie kann man
> einen RawString an eine Leszte anhängen, um die dopplten Bachslashes zu
> vermeiden ?
Da Dein regulärer Ausdruck keine Backslashes enthält, sollten die auch keine
Probleme bereiten :-)
> Ich will folgendes machen :
>
> regex = re.compile("HOSTNAME")
> for i in range( len( self.hostlist ) ):
> self.baselist.append( regex.sub( self.hostlist[i],
> self.base ) )
Dafür benötigst Du keine regex:
for host in self.hostlist:
self.baselist.append(self.base.replace("HOSTNAME", host))
> In der Liste ( das Skript läuft auf einem Windows System ) finde ich
> aber immer verdoppelte Backslashes vor.
>
> Hat jemand vielleicht einen kleinen Tipp für mich ?
Ich vermute, dass Du auch nach der vorgeschlagenen Änderung noch doppelte
Backslashes sehen wirst. Die wären dann ein Artefakt, das bei der Umwandlung
von Listen in Strings entsteht:
>>> print data
['yadda\\yadda']
Die doppelten Backslashes sind dabei genauso wenig Bestandteil des Strings wie
die einschließenden Anführungszeichen. Sie verschwinden, wenn Du die
Listeneinträge einzeln ausgibst:
>>> print data[0]
yadda\yadda
Listeneinträge werden aber für die Ausgabe mit repr() konvertiert, da man
sonst die einzelnen Strings nicht mehr voneinander unterscheiden könnte.
>>> print repr(data[0])
'yadda\\yadda'
Rawstrings sind dagegen eine Erleichterung bei der Eingabe eines
Stringliterals im Sourcecode:
>>> a = "x\\y"
>>> b = r"x\y"
>>> a == b
True
>>> a, b
('x\\y', 'x\\y')
Peter