Hallo zusammen,
ich bin hier im Forum, sowie mit dem Umgang mit Python ein absoluter Neuling.
Ich stocke gerade bei folgendem Problem:
Ich möchte in das Suchmuster re.compile("((@.*){(kennwort))") kennwort als variable nutzen. im weiteren verlauf meines programmes lege ich eine weitere variable fest die gleich der 3. suchgruppe meines suchmusters sein soll. python spuckt mir nun an dieser stelle aber einen fehler aus
Traceback (most recent call last):
File "<pyshell#39>", line 10, in <module>
kennwort2= foundreplace.group(3)
AttributeError: 'NoneType' object has no attribute 'group'
ich weiss nicht woran das liegt? hat jemand von euch eine idee?
danke im vorraus
orangenbaum
Variablen Problem im Suchmuster
-
- User
- Beiträge: 6
- Registriert: Montag 14. Dezember 2009, 13:11
hm ok, aber wie kann ich denn dann die variable in das muster einbauen?
also wie gesagt, das muster ist re.compile("((@.*){(kennwort))") und "kennwort" ist die variable für ein sich wechselndes wort...
weiss da jemand bescheid?
lg
also wie gesagt, das muster ist re.compile("((@.*){(kennwort))") und "kennwort" ist die variable für ein sich wechselndes wort...
weiss da jemand bescheid?
lg
-
- User
- Beiträge: 6
- Registriert: Montag 14. Dezember 2009, 13:11
meinst du so:
re.compile("((@.*){(%s))") % kennwort
wenn ich das eingebe kommt der Fehler:
ersetzwort= re.compile("((@.*){(%s))") % kennwort
TypeError: unsupported operand type(s) for %: '_sre.SRE_Pattern' and 'str'
lg
re.compile("((@.*){(%s))") % kennwort
wenn ich das eingebe kommt der Fehler:
ersetzwort= re.compile("((@.*){(%s))") % kennwort
TypeError: unsupported operand type(s) for %: '_sre.SRE_Pattern' and 'str'
lg
Code: Alles auswählen
ersetzwort= re.compile("((@.*){(%s))" % kennwort)
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Immer an die Zukunft denken
Code: Alles auswählen
ersetzwort= re.compile("((@.*)(({0}))".format(kennwort))
-
- User
- Beiträge: 6
- Registriert: Montag 14. Dezember 2009, 13:11
hmm das mit der zukunft musst du mir newbie erklären^^ aber danke für den tip, hat geholfen:-)
lg
lg
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Das "".format() ist seit Python 2.6 der Standard fürs Formatieren von Zeichenketten und wird auch so in der 3.x Serie verwendet. Insofern progammiert man damit zukunftsträchtiger als mit der "alten" "%s" % string-Formatierung.orangenbaum hat geschrieben:hmm das mit der zukunft musst du mir newbie erklären^^ aber danke für den tip, hat geholfen:-)
lg
@Hyperion: Wer hat das zum Standardweg erklärt?
@orangenbaum: Man sollte das `kennwort` besser noch durch `re.escape()` schicken, bevor man es einsetzt. Nur für den Fall, dass es vielleicht mal etwas enthalten könnte, das in regulären Ausdrücken eine besondere Bedeutung hat.
@orangenbaum: Man sollte das `kennwort` besser noch durch `re.escape()` schicken, bevor man es einsetzt. Nur für den Fall, dass es vielleicht mal etwas enthalten könnte, das in regulären Ausdrücken eine besondere Bedeutung hat.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
IchBlackJack hat geschrieben:@Hyperion: Wer hat das zum Standardweg erklärt?
Ok, hast ja Recht. Standard ist vielleicht kein so gutes Wort dafür; können wir uns auf "präferierte Methode" einigen?
-
- User
- Beiträge: 6
- Registriert: Montag 14. Dezember 2009, 13:11
@BlackJack: Danke für den Tip, aber ich glaube, dass dies hier nicht nötig ist, da in dem String wirklich nie ein Sonderzeichen vorkommt. Trotzdem nochmal danke!
lg
lg
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Da %-Formatting in Python 3 deprecated wird, bleibt das nur als logischer schluss uebrigMasaru hat geschrieben:... wenn Du nochmal sagen kannst "wo" das steht, klar gerne warum nicht.
Whats new in Python 3.0 hat geschrieben:PEP 3101: Advanced String Formatting. Note: the 2.6 description mentions the format() method for both 8-bit and Unicode strings. In 3.0, only the str type (text strings with Unicode support) supports this method; the bytes type does not. The plan is to eventually make this the only API for string formatting, and to start deprecating the % operator in Python 3.1
Michael Markert ❖ PEP 8 Übersetzung ❖ Tutorial Übersetzung (3.x) ⇒ Online-Version (Python 3.3) ❖ Deutscher Python-Insider ❖ Projekte
Ah, wusste ich noch gar nicht, danke .cofi hat geschrieben:Da %-Formatting in Python 3 deprecated wird, bleibt das nur als logischer schluss uebrig
So ganz steht es Deinem Zitat nach ja aber momentan noch nicht fest cofi:
"...The plan is to eventually make this the only API for string formatting, and to start deprecating the % operator in Python 3.1 ..."
Ich plane auch meinen Keller bis Januar aufzuräumen ... das leider schon seit so an die 3 Jahren *pfeif*.
>>Masaru<<
-
- User
- Beiträge: 6
- Registriert: Montag 14. Dezember 2009, 13:11
hallo, ich bins nochmal^^
ich komm immernoch nicht mit dem suchmuster klar, ich hab es jetzt so:
ersetzwort= re.compile("((@.*){(%s),)" % kennwort)
(bei der Variante von Zap kommt bei mir einer Fehler)
Jedoch bindet er aber trotzdem nicht die Variable "Kennwort" in das Muster ein, die Suche ergibt None...
hat jemand eine Idee woran das liegen kann?
lg
ich komm immernoch nicht mit dem suchmuster klar, ich hab es jetzt so:
ersetzwort= re.compile("((@.*){(%s),)" % kennwort)
(bei der Variante von Zap kommt bei mir einer Fehler)
Jedoch bindet er aber trotzdem nicht die Variable "Kennwort" in das Muster ein, die Suche ergibt None...
hat jemand eine Idee woran das liegen kann?
lg
Also wenn du alles (bis auf format()) befolgst was gesagt wurde geht's doch...
Edit: mit format geht's natürlich auch Ich habe aber gerade nur Python25 im Angebot
Code: Alles auswählen
In [23]: kennwort = "hallo"
In [24]: c = re.compile("((@.*){(%s),)" % re.escape(kennwort))
In [25]: c.match("@lalala{hallo,").groups()
Out[25]: ('@lalala{hallo,', '@lalala', 'hallo')
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Ach ich sehe grad, dass die geschweifte Klammer wohl kein Tippfehler war. Dann musst Du das bei .format() entsprechend escapen:
Code: Alles auswählen
In [2]: "((@.*){{({0}),)".format("welt")
Out[2]: '((@.*){(welt),)'