Python Regex mit Zeichenfolge, die mehrere Räume hat

stimmen
0

Ich habe die folgende Zeichenfolge Beispiel:

'NAME: test1,  DESCR: AAA 1111S ABC 48 BB (4 BBBB) TEST1 '

Ich versuche, „AAA 1111S“ zu extrahieren, aber ich kämpfen, um zu wissen, was ich in der Regex falsch mache?

die Regex i unter verwende, ich dachte, es basiert auf dem ersten Platz arbeiten würde dann 2. Platz und restlichen Zeichen in einem String.

^.+(AAA\s.+)\s.+$

aber es wird nur ziehen Sie die folgenden:

AAA 1111S ABC 48 BB (4 BBBB) TEST1

Veröffentlicht am 20/10/2018 um 12:57
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
0

In Ihrem regex verwenden Sie , (AAA\s.+)wo die .+jedes Zeichen wird 1+ mal. Das wird bis zum Ende des Strings entsprechen. Der Teil, der folgt \s.+"$passt aufTEST1 "

Sie könnten eine positive Lookbehind verwenden (?<=")zu behaupten , was ist auf der linken Seite ein doppeltes Anführungszeichen ist. Sie dann auf AAA von 1+ mal ein Leerzeichen gefolgt \s+und 1+ mal kein Leerzeichen \S+.

(?<=")AAA\s+\S+

regex Demo

Wenn Sie den Anker ^ und Spiel aus dem ersten Auftreten von AAA halten möchten, können Sie verwenden , .+?welche alle Zeichen übereinstimmen 1+ mal nicht gierig.

^.+?(AAA\s+\S+)

regex Demo

Beantwortet am 20/10/2018 um 13:02
quelle vom benutzer

stimmen
0
>>> import re
>>> string = 'NAME: "test1",  DESCR: "AAA 1111S ABC 48 BB (4 BBBB) TEST1
>>> sol = re.findall('\w{3}\s\w{5}',string) 
>>> sol
['AAA 1111S']
Beantwortet am 20/10/2018 um 13:11
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more