Seite 1 von 1

Klammern & Inhalte aus textstr entfernen

Verfasst: Samstag 21. Juli 2018, 13:18
von ArashiTok
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

Re: Klammern & Inhalte aus textstr entfernen

Verfasst: Samstag 21. Juli 2018, 13:31
von nezzcarth
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'

Re: Klammern & Inhalte aus textstr entfernen

Verfasst: Samstag 21. Juli 2018, 13:45
von ArashiTok
ich will den inhalt ebenfalls los werden ^^ sagte ja klammern inklusiv inhalt aber denoch netter ansatz

Re: Klammern & Inhalte aus textstr entfernen

Verfasst: Samstag 21. Juli 2018, 13:55
von nezzcarth
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.

Re: Klammern & Inhalte aus textstr entfernen

Verfasst: Samstag 21. Juli 2018, 14:02
von __blackjack__
@nezzcarth: Versuch das mal mit mehr als einer geklammerten Zahl in `s`.

Mein Vorschlag: re.sub(r' \([0-9a-f]+?\)|\[[0-9a-f]+?\] ', ' ', text)

Re: Klammern & Inhalte aus textstr entfernen

Verfasst: Samstag 21. Juli 2018, 14:03
von ArashiTok
Ha... ja genau das ist es ^^ vielen dank

Re: Klammern & Inhalte aus textstr entfernen

Verfasst: Samstag 21. Juli 2018, 14:19
von nezzcarth
@__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'