Hallo,
ich habe den String 'a' und moechte aus den eckigen Klammern nur den ersten Buchstaben uebernehmen um den folgenden String 'b' zu erhalten:
a = 'XXxxXXxXSSAA[C/G]Rwdefffghh' # Eingabe
b = 'XXxxXXxXSSAACRwdefffghh' # Ausbage
Wie koennte man dieses Problem loesen?
Vielen Dank im Vorraus.
RegEx problem
Das ist doch eigentlich ganz einfach:
Code: Alles auswählen
In [485]: a
Out[485]: 'XXxxXXxXSSAA[C/G]Rwdefffghh'
In [486]: re.sub(r'\[(.)/.\]', r'\1', a)
Out[486]: 'XXxxXXxXSSAACRwdefffghh'
Regular Expressions erschlagen Anfänger immer so schnell. Das ist jetzt ein relativ einfacher Ausdruck, den wir zur Erklärung mal aufdröseln. Man beachte das r vor dem String. Dadurch wird der String als raw gekennzeichnet, was wiederum bedeutet, dass der Backslash seine Rolle als Escape-Zeichen in Python verliert. Ohne das r müsste jeder Backslash verdoppelt werden damit einer noch bei der Regex-Engine ankommt. Jetzt aber zum Ausdruck selber:BlackJack hat geschrieben:Das ist doch eigentlich ganz einfach:Code: Alles auswählen
re.sub(r'\[(.)/.\]', r'\1', a)
- \[ - eine öffnende eckige Klammer (Der Backslash ist nötig, da eine einzelne eckige öffnende Klammer als Beginn eines Sets von Zeichen gesehen würde)
- ( - Definiert den Beginn einer Gruppe
- . - ein beliebiges Zeichen
- ) - das Ende der zuletzt geöffneten Gruppe
- . - ein beliebiges Zeichen
- \] - eine schließende eckige Klammer
Wenn du die Flexibilität von regulären Ausdrücken nicht benötigst, dann könntest du auch klassisch und schneller arbeiten.mit hat geschrieben:Wie koennte man dieses Problem loesen?
Code: Alles auswählen
a = 'XXxxXXxXSSAA[C/G]Rwdefffghh'
data = a.split('[')
result = ''.join([data[0], data[1][0], data[1][4:]])