Klammern & Inhalte aus textstr entfernen

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
ArashiTok
User
Beiträge: 11
Registriert: Montag 19. Juni 2017, 14:06

Hi hab mal eine allgemeine frage,
da ichs nicht so mit Regex hab wollte ich mal fragen ob ihr mir nen guten ansatz geben könnt.
Ich habe mehrere zeilen in dem CRC strings stehen zbsp. so [48d08d521] oder so (48d08d521) ich möchte die klammernpaare komplett entfernen.

ich habs mit:

Code: Alles auswählen

str = re.sub(r'(.*)_.*', '\\1', str)
Probiert das schneidet zwar den bereich (...) weg aber der rest ^^ verschwindet ebenso,
hat einer vieleicht eine idee womit ich nur das Klammernpaar inklusiv inhalt entferne.

MfG Ara
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Reguläre Ausdrücke sind hier meiner Meinung nach nicht notwendig.

Um unerwünschte Zeichen loszuwerden, kann man z.B. so vorgehen:

Code: Alles auswählen

In [1]: s = ' [48d08d521] '

In [2]: ''.join(char for char in s if not char in '[]() ')
Out[2]: '48d08d521'
ArashiTok
User
Beiträge: 11
Registriert: Montag 19. Juni 2017, 14:06

ich will den inhalt ebenfalls los werden ^^ sagte ja klammern inklusiv inhalt aber denoch netter ansatz
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

Dann vielleicht so:

Code: Alles auswählen

In [1]: import re

In [2]: s = 'abcdef [48d08d521] ghij klmn'

In [3]: re.sub(r'\[[^\]]+\]', '', s)
Out[3]: 'abcdef  ghij klmn'
Runde und eckige Klammern würde ich separat behandeln, da es so übersichtlicher ist und man Mischformen leichter ausschließen kann.
Benutzeravatar
__blackjack__
User
Beiträge: 13006
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@nezzcarth: Versuch das mal mit mehr als einer geklammerten Zahl in `s`.

Mein Vorschlag: re.sub(r' \([0-9a-f]+?\)|\[[0-9a-f]+?\] ', ' ', text)
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
ArashiTok
User
Beiträge: 11
Registriert: Montag 19. Juni 2017, 14:06

Ha... ja genau das ist es ^^ vielen dank
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

@__blackjack__:

Ja, Verschachtelungen sind hierbei problematisch. Ein etwas seltenere Option wäre, 'luapatt' zu nehmen:

Code: Alles auswählen

In [1]: import re

In [2]: s1 = 'abcdef [48d08d521] ghij [923df234dd1] klmn'

In [3]: s2 = 'abcdef [48d08[d]521] ghij [923df234dd1] klmn'

In [4]: re.sub(r'\[[^\]]+\]', '', s1)
Out[4]: 'abcdef  ghij  klmn'

In [5]: re.sub(r'\[[^\]]+\]', '', s2)
Out[5]: 'abcdef 521] ghij  klmn'

In [6]: import luapatt

In [7]: luapatt.gsub(s1, '%b[]', '')
Out[7]: 'abcdef  ghij  klmn'

In [8]: luapatt.gsub(s2, '%b[]', '')
Out[8]: 'abcdef  ghij  klmn'

Antworten