Backslash in regular expressions
![](https://secure.gravatar.com/avatar/3e2e5d8487d3e785a27c3b7a36144f7f.jpg?s=120&d=mm&r=g)
Hallo, 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 ? 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 ) ) 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 ? Danke und Gruß Bernd _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
![](https://secure.gravatar.com/avatar/e88b046bd99c34714b60a04eaf51d334.jpg?s=120&d=mm&r=g)
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 _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (2)
-
Bernd Viehmann
-
Peter Otten