2016-08-04 18 views
-2

Ich bin für eine Python Regex suchen, 'didn't' und gibt nur den Charakter entsprechen kann, die unmittelbar durch ein Apostroph vorangestellt ist, wie 't, aber nicht die 'd oder t' am Anfang und Ende.Suche nach einem Apostroph Regex Matching nur innerhalb Zeichenfolge

Ich habe versucht (?=.*\w)^(\w|')+$, aber es entspricht nur den Apostroph am Anfang.

Einige weitere Beispiele:

'I'm' nur nur 'm und nicht 'I

'Erick's' sollte Apostrophe 's zurückkehren und nicht 'E

Der Text wird immer beginnen und enden mit einem Apostroph und können, umfassen entsprechen sollten innerhalb des Textes. Hier

+0

Was bedeutet "in String"? Für welche Art von Text stimmen Sie überein? – Ryan

+0

@anubhava Wenn die Eingabe nur 'a' ist, sollte es nicht passen – Erick

+0

'r" \ b '\ w "' könnte funktionieren, aber es könnte nicht oder es könnte nicht optimal sein, weil wir nicht wissen, welche Art von Eingabe Sie Könnte bekommen. – Ryan

Antwort

1

ist ein bunch of possible solutions:

import re 

s = "'didn't'" 
print(s.strip("'")[s.strip("'").find("'")+1]) 
print(re.search(r'\b\'(\w)', s).group(1)) 
print(re.search(r'\b\'([^\W\d_])', s).group(1)) 
print(re.search(r'\b\'([a-z])', s, flags=re.I).group(1)) 
print(re.findall(r'\b\'([a-z])', "'didn't know I'm a student'", flags=re.I)) 

Die s.strip("'")[s.strip("'").find("'")+1] erhält das Zeichen nach den ersten ' nachdem den vorderen/hinteren Apostrophe Strippen.

re.search(r'\b\'(\w)', s).group(1) Die Lösung wird das Wort char nach einem ' (d.h. [a-zA-Z0-9_], kann von hier eingestellt werden), die mit einem Wort char (aufgrund der \b Wortgrenze) vorgeschaltet ist.

Die re.search(r'\b\'([^\W\d_])', s).group(1) zu der obigen Lösung ist fast identisch, es holt nur einen Brief Charakter als [^\W\d_] Matches jeden char andere als eine nicht-Wort, Ziffer und _.

Beachten Sie, dass die re.search(r'\b\'([a-z])', s, flags=re.I).group(1) Lösung mit der obigen identisch ist, aber Sie können es nicht Unicode mit re.UNICODE bewusst machen.

Die letzte re.findall(r'\b\'([a-z])', "'didn't know I'm a student'", flags=re.I) zeigt nur, wie mehrere Buchstaben Zeichen aus einer Zeichenfolge-Eingabe abgerufen werden.

+1

Ihre Lösungen funktionieren perfekt. – Erick