RegEx Python

OP #3126729
Hallo an alle Python-Programmierer,

ich würde gerne aus einem String mit Hilfe der re-Funktion in Python 
einzelne Teile extrahieren.

Hier der String:
00000010(00007273)

Ich würde gerne den Wert VOR der Klammer (hier: 00000010) und den Wert 
IN der Klammer (hier 7273) einzeln bekommen.

Meine Versuche mit:

 m = re.search(r"(.*)((.*))", data)

haben leider nicht geklappt.

Gruß,

Michi
OP #3126732
Es kommt noch eine kl. Ergänung...

Der String ist doch etwas komplizierter als gedacht - es wurde nicht 
alles in der Konsole dargestellt.

Hier der passende String

('\x0200000010(00007336)\x03\x02',)


Aus diesem String will ich den Wert vor der Klammer ohne  dem "('\x02" 
(also 00000010) und den Wert in der Klammer (000007336) bekommen.
Gast #3126746
In Ruby etwa so:
1
/(?:\\x)(\d+)(?:\()(\d+)/.match('\x0200000010(00007336)\x03\x02').to_a[1,2]
2
=> ["0200000010", "00007336"]
In Python bin ich nicht so fit, wird wohl ähnlich sein, aber nicht so 
schön.

Die () im String wirst Du womöglich durch \ escapen müssen, ebenso das \ 
im String. Jedenfalls in Ruby.

Und übrigens:

>haben leider nicht geklappt.

ist eine schlechte Problembeschreibung.
OP #3126749
Hallo,

vielen Dank für Eure Hilfe, uns ja, die Beschreibung war nicht ganz so 
gut.

Hier nochmal der zweite Anlauf.

Also der String sieht fast wie im ersten Posting aus- hier der richtige:
\x0200000010(00007552)\x03\x0e

(beim zweiten Posting hat schon das RegEx etwas zugeschlagen...)

Mein Python-RegEx sieht so aus:
m = re.search("(.*)(\d\d)\((.*)\)(.*)", data)

Mit "print m.groups()" bekomme ich auch das Array der Stringzerlegung 
nun angezeigt:
('\x02000000', '10', '00007552', '\x03\x06')
Ich habe also die beidne gesuchen Werte - nur noch nicht einzeln.

Wenn ich jetzt "print m.groups(2)" ausführe bekomme ich leider immer 
noch den gleichen String wie bei m.groups().

Wie kann ich mir jetzt die einzelnen Teile anzeigen lassen ?
Moderator #3126819
Michael A. schrieb:
> es muss m.group(x) und NICHT m.groups(x) heißen !!

Noch ein kleiner Tipp: Falls du alle vier Gruppen in getrennten
Variablen weiterverarbeiten möchtest, ist es eleganter,
1
  var1, var2, var3, var4 = m.groups()

zu schreiben, anstatt jede Gruppe mit einem eigenen m.group(i)-Aufruf
aus dem Match zu extrahieren (var1 … var4 sind dabei natürlich durch
aussagekräftige Variablennamen zu ersetzten).
Gast #3127137
1
#!/usr/bin/env python
2
# -*- coding: UTF-8 -*-
3
import re
4
data = '\x0200000010(00007552)\x03\x0e'
5
pattern = r'.(\d+)\((\d+)\).*'
6
m = re.search(pattern, data)
7
print m.group(1)
8
print m.group(2)
9
# 00000010
10
# 00007552

So vielleicht?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.