Seite 1 von 1
Match String
Verfasst: Montag 10. Januar 2022, 21:44
von Carlos123
Hallo zusammen,
Ich vereinfache die Aufgabe: ich habe den folgenden String:
ich versuche den Text "8 objects with statement 'o.k.'" zu matchen, mit Gruppen, weil ich danach die Zahl "8" haben möchte.
Es ist ein grosses Dokument mit ...statement 'not ok' und viele andere, deswegen möchte ich den ganzen Text matchen.
Ich habe's irgendwie hingekriegt, aber nicht gespeichert und jetzt komme ich nicht mehr drauf. Folgendes habe ich probiert:
Code: Alles auswählen
import re
reg = re.compile(r'(\d)+(\s)+("objects with status \'o.k.\'")')
mo = reg.search(s)
## zahl =mo.groups()[0]
allerdings ist mo = None.
was mache ich hier falsch
Danke im Voraus
Carlos
Re: Match String
Verfasst: Dienstag 11. Januar 2022, 01:01
von __blackjack__
@Carlos123: Du suchst nach doppelten Anführungsstrichen die ich in dem Beispiel nicht entdecken kann. Und ein paar runde Klammern sind da auch zu viel/unnötig wenn Du nur die 8 haben möchtest.
Dein regulärer Ausdruck matched beispielsweise """aaa 8 "objects with status 'o.k.'" hhh""".
Re: Match String
Verfasst: Dienstag 11. Januar 2022, 06:32
von sparrow
Falls das Logs sind, die zeilenweise geschrieben wurden, wäre auch eine simple Lösung ohne RE möglich.
Re: Match String
Verfasst: Dienstag 11. Januar 2022, 21:30
von Carlos123
__blackjack__ hat geschrieben: Dienstag 11. Januar 2022, 01:01
@Carlos123: Du suchst nach doppelten Anführungsstrichen die ich in dem Beispiel nicht entdecken kann. Und ein paar runde Klammern sind da auch zu viel/unnötig wenn Du nur die 8 haben möchtest.
Dein regulärer Ausdruck matched beispielsweise """aaa 8 "objects with status 'o.k.'" hhh""".
Mit anderen Worten ich will das hier matchen:
8 objects with status 'o.k.'
Ich ein docx file in dem unter anderem folgendes gibt:
3 objects with status 'o.k.'
34 objects with status 'nok.'
11 objects with status 'na.'
und deswegen will den ganzen String matchen damit ich weiss, wieviele OKs , wieviele NOKs, wieviele NAs usw.
Re: Match String
Verfasst: Dienstag 11. Januar 2022, 21:33
von Carlos123
sparrow hat geschrieben: Dienstag 11. Januar 2022, 06:32
Falls das Logs sind, die zeilenweise geschrieben wurden, wäre auch eine simple Lösung ohne RE möglich.
Es ist ein docx file, da sind auch unter anderem folgende Zeilen:
3 objects with status 'o.k.'
34 objects with status 'nok.'
11 objects with status 'na.'
und da will ich rausfinden wieviel OKs, NOKs und NAs...
Re: Match String
Verfasst: Dienstag 11. Januar 2022, 21:46
von Carlos123
Ich hab's
Code: Alles auswählen
reg = re.compile(r'(\d)+(\s)+(objects with status \'o.k.\')')
Danke für den Hinweis __blackjack__
Re: Match String
Verfasst: Dienstag 11. Januar 2022, 22:21
von sparrow
Wenn du da schon eine Regular Expression drauf wirfst, warum dann nicht gleich für alle Fälle?
Ungetestet:
Code: Alles auswählen
import itertools
import re
text = """
3 objects with status 'o.k.'
34 objects with status 'nok.'
11 objects with status 'na.'
2 objects with status 'o.k.'
25 objects with status 'nok.'
99 objects with status 'na.'
"""
reg = re.compile(r"(\d+)\ +objects with status '(o.k.|nok.|na.)'")
matches = reg.findall(text)
keyfunc = lambda t: (t[1])
matches.sort(key=keyfunc)
status_to_sum = {
status: sum(int(e[0]) for e in objects) for
status, objects in itertools.groupby(matches, keyfunc)
}
print(status_to_sum)