RegExpr '\' matchen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
hehejo
User
Beiträge: 56
Registriert: Freitag 18. Februar 2005, 18:24
Wohnort: Stein
Kontaktdaten:

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?
Gruß, Johannes
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Code: Alles auswählen

_match = re.compile(r"\\")
_match = re.compile(r"[\/*?\"<>|\\]")
Gruß, mawe
hehejo
User
Beiträge: 56
Registriert: Freitag 18. Februar 2005, 18:24
Wohnort: Stein
Kontaktdaten:

ui danke!
Was bedeutet denn das "r"?
Gruß, Johannes
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Um ehrlich zu sein: ich hab keine Ahnung :oops:
Regex vielleicht?
hehejo
User
Beiträge: 56
Registriert: Freitag 18. Februar 2005, 18:24
Wohnort: Stein
Kontaktdaten:

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?
Gruß, Johannes
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
hehejo
User
Beiträge: 56
Registriert: Freitag 18. Februar 2005, 18:24
Wohnort: Stein
Kontaktdaten:

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"?
Gruß, Johannes
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Weil du .match() benutzt. Versuch doch mal .search() stattdessen.
Zuletzt geändert von Leonidas am Dienstag 10. Mai 2005, 15:09, insgesamt 1-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
hehejo
User
Beiträge: 56
Registriert: Freitag 18. Februar 2005, 18:24
Wohnort: Stein
Kontaktdaten:

*klatsch*
DANKE
Gruß, Johannes
[b][color=red]ascii stupid question,
get stupid ansii[/color][/b]
[url]http://www.hehejo.de[/url]
Antworten