2017-02-02 4 views
-2

Ich versuche Regex zu verwenden, um eine Zeichenfolge zwischen einfachen Anführungszeichen zu extrahieren und alle vorherigen oder nachfolgenden Leerzeichen zu trimmen. Ich bin in der Lage, die Zeichenfolge zwischen den einzelnen Anführungszeichen mit (?<=')[^']+(?=') zu extrahieren, aber es ist das Trimmbit, mit dem ich kämpfe.regex extrahieren Zeichenfolge zwischen einfachen Anführungszeichen trim whitespace

Zeichenfolge: message sent from ' joe bloggs '.

ich das Ergebnis von regex extrahiert sein möchten: joe bloggs

+5

loswerden Es wäre besser, wenn Sie die Sprache markieren, die Sie verwenden und den Code teilen, den Sie versucht haben. –

+0

Bitte erwähnen Sie die verwendete Sprache. –

+0

Mit den meisten Regex-Lösungen können Sie eine Untergruppe extrahieren. Was macht es hier einfach. Aber diese Frage ohne die genaue Technologie ist nutzlos. –

Antwort

-1

Vielleicht ein einfacher regulärer Ausdruck wie dies sollte es tun:

import re 
s = "message sent from ' joe bloggs  '" 
extracted_text = re.search('''(?<=')\s*[^']+?\s*(?=')''', s) 
print extracted_text.group().strip() # output: 'joe bloggs' 

Hier ist, was dieser Code tut:

  • (?<=') - positiver Blick hinter: Marken sicher, dass der Text, den es passt, eine ' davor hat.
  • \s* - null oder mehr Leerzeichen.
  • [^']+? - so viele Zeichen, die keine Anführungszeichen sind.
  • \s* - wieder null oder mehr Leerzeichen.
  • (?=') - Positive Blick voraus: stellt sicher, dass der Text, den es passt, mit einem Zitat endet.
  • Sobald es das entspricht, erhalten Sie es durch den Aufruf match.group().
  • Dann sind Sie mit der Zeichenfolge ' joe bloggs ' verlassen. So werden Sie den Whitespace durch Aufruf str.strip()
+0

Danke für Ihre Hilfe, das hat mein Problem gelöst. – Tom

-1

Wenn Sie den Text zwischen einfachen Anführungszeichen bekommen ja auch schon, dann ist der Rest ist so einfach wie

s = ' joe bloggs  ' 
result = s.strip() 

Natürlich können Sie tun könnte es mit Regex, wobei in diesem Fall kann ich den hervorragenden https://regex101.com/

0

Einen Weg, empfehlen Sie es tun könnten:

'\s*([^']+?)\s*' 
  • ' Spiel ein Zitat
  • \s* Spiel optional Leerzeichen vor im Spiel
  • ([^']+?) erfassen Zeichenfolge
  • \s* Spiel optional Leerzeichen nach im Spiel
  • ' Spiel ignoriert werden ignoriert werden ein Angebot

Sie können es versuchen hier: https://regex101.com/r/vQqnaB/2

import re 
my_str = "message sent from ' joe bloggs  '" 

content = re.search(r"'\s*([^']+?)\s*'", my_str).groups()[0] 
print('%r' % content) # 'joe bloggs' 
+0

Ihr Code erfasst die Anführungszeichen, sodass Sie den Leerraum nicht entfernen können. –

+1

Der gestreifte Inhalt wird in Gruppe 1 sein – Cyrbil

Verwandte Themen