Seite 1 von 1

RegExpr '\' matchen

Verfasst: Dienstag 10. Mai 2005, 12:18
von hehejo
Hi, ich möchte mit regulären Ausdrücken herausfinden, ob bestimmte Sonderzeichen in einem String enthalten sind.
Das hier klappt ganz gut:

Code: Alles auswählen

>>> import re
>>> _match = re.compile("[\/*?\"<>|]")
Möchte ich aber den '\' matchen dann kommt dieser Fehler

Code: Alles auswählen

>>> import re
>>> _match = re.compile("[\]")
Traceback (most recent call last):
  File "<pyshell#22>", line 1, in ?
    _match = re.compile("[\]")
  File "E:\python\python\lib\sre.py", line 179, in compile
    return _compile(pattern, flags)
  File "E:\python\python\lib\sre.py", line 230, in _compile
    raise error, v # invalid expression
error: unexpected end of regular expression
_match = re.compile("[\\]") hat er auch nicht genommen.
Wie muss ich denn das '\' richtig maskieren?

Verfasst: Dienstag 10. Mai 2005, 13:08
von mawe
Hi!

Code: Alles auswählen

_match = re.compile(r"\\")
_match = re.compile(r"[\/*?\"<>|\\]")
Gruß, mawe

Verfasst: Dienstag 10. Mai 2005, 13:11
von hehejo
ui danke!
Was bedeutet denn das "r"?

Verfasst: Dienstag 10. Mai 2005, 13:16
von mawe
Um ehrlich zu sein: ich hab keine Ahnung :oops:
Regex vielleicht?

Verfasst: Dienstag 10. Mai 2005, 13:33
von hehejo

Code: Alles auswählen

>>> import re
>>> co = re.compile(r"[\/*?\"<>|\\]")

Code: Alles auswählen

>>> match = co.match("/hallo")
>>> match or False
<_sre.SRE_Match object at 0x00DB0330>
>>> match = co.match("\\hallo")
>>> match or False
<_sre.SRE_Match object at 0x00BE1FA8>
>>> match = co.match("(demo) (C) Viklund / Karlsson")
>>> match or False
False
>>>
Gut, die RegExpr funktioniert - nur leider nicht beim letzen Teststring. An was kann denn das nun liegen?

Verfasst: Dienstag 10. Mai 2005, 13:53
von Leonidas
r steht für Raw. Also Rohstring: soll heißen, die ganzen Backslashes werden ignoriert und einfach als Backslashes genommen, so als würde man sie escapen. Praktisch eben für Regex und Dateipfade unter einem bestimmten Betriebssystem.

Verfasst: Dienstag 10. Mai 2005, 13:58
von hehejo
Das hieße dann ja, das ich aus
co = re.compile(r"[\/*?\"<>|\\]")
dieses hier machen kann:
co = re.compile(r"[/*?\"<>|\]")

Nur warum hat er in meinem Beispiel vorhin den lezten String nicht "erkannt"?

Verfasst: Dienstag 10. Mai 2005, 14:46
von Leonidas
Weil du .match() benutzt. Versuch doch mal .search() stattdessen.

DANKE

Verfasst: Dienstag 10. Mai 2005, 14:59
von hehejo
*klatsch*
DANKE