ob der string beginnt und endet mit dem gleichen Wort
Ich versuche zu überprüfen ob der string beginnt und endet mit dem gleichen Wort. zBearth
.
s=raw_input();
m=re.search(r"^(earth).*(earth)$",s)
if m is not None:
print "found"
mein problem ist, wenn der string nur aus einem Wort besteht zB: earth
Derzeit habe ich hart codiert in diesem Fall durch
if m is not None or s=='earth':
print "found"
Gibt es eine andere Möglichkeit, dies zu tun?
EDIT:
Wörter in einem string durch Leerzeichen voneinander getrennt. Suche nach einer regex-Lösung
some examples
:
"Erde ist Erde" ,"Erde", --> valid
"earthearth", "eartheeearth", "Erde Erde mars" --> invalid
- sind Sie auf der Suche nach einem bestimmten Wort (
earth
) oder jeder anderen zufälligen Wort - es kann ein beliebiges Wort sein. vorzugsweise eine Lösung mit regulären Ausdruck, aber auch andere einfache Lösungen sind auch willkommen 🙂
- Warte, meinst du (1) wenn Sie diesen code ausführen, werden Sie wissen, was Wort, das Sie suchen, und Sie überprüfen möchten, dass die Zeichenfolge beginnt und endet mit bestimmten Wort, oder (2) es gibt kein bestimmtes Wort, Sie wollen einfach nur, um zu sehen, wenn das erste und das Letzte Wort in der Zeichenfolge gleich sind, was auch immer das Wort sein kann?
- Was über so etwas wie
eabce
? es beginnt und endet mit dem gleichen Buchstabene
. - sorry für die Verwirrung, ich meine, (2) es gibt kein spezifisches Wort, das ich Suche. das Wort 'Erde', zum Beispiel
- fügen Sie einige bessere Beispiele.
- Wenn Sie sagen, "Wort", was trennt die Worte, oder sind Sie gerade im Gespräch über die Charaktere? In anderen Worten (sorry für das Wortspiel), deutlich, dass die Zeichenfolge "foo bar foo" sollte true zurückgeben, ja? Aber was ist mit dem string "foobar foo"? Sollte true zurückgeben, oder nicht?
- Buchstaben machen word..also Buchstaben !=Wort
- ich habe die Frage bearbeitet
- Da das, was Sie wirklich wollen, ist, wenn ein Satz beginnt und endet mit dem gleichen Wort -, müssen Sie zuerst zu definieren, was ein Wort ist. Einfach mit
\w
, diematches any alphanumeric character and the underscore; this is equivalent to the set [a-zA-Z0-9_]
wird nicht funktionieren, weil die meisten Ihrer Sätze wird scheitern, diese zu überprüfen; da es kaum beginnen und enden mit einer Präposition. Betrachten Sie zum Beispiel diesen Satz, sollte dieses match?The Earth is not completely round, just like other planets that look like Earth.
- wenn
"earth"
gilt dann"earthearth"
sollte auch gültig sein. Geben Sie Ihre Anforderungen klar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie Rückverweis innerhalb von regex
Diese würde mit einem string nur, wenn es
find whether the string starts and ends with the same word
.. ich denke mal er will mit einer Zeichenfolge überein mit jedem Wort, das nicht nurearth
ends with the same word- 'earth'.
🙂|$
oder das erste Wort entspricht, mit der letzten mit\1$
. warum funktioniert das nicht: r"^(\w+\b).*(\b\1$|$)" ?Verwenden Sie die
str.startswith
undstr.endswith
Methoden statt.Können Sie einfach kombinieren Sie in einer einzigen Funktion:
Und jetzt können wir es nennen:
Wenn, jedoch, wenn der code übereinstimmt Worte und nicht Teil eines Wortes, ist es vielleicht einfacher zu split die Zeichenfolge, und dann überprüfen, wenn das erste und das Letzte Wort die Zeichenfolge, die Sie überprüfen möchten:
Läuft es:
Können Sie
str.startswith
undstr.endswith
:Update:
Wenn die Wörter durch Leerzeichen getrennt sind und die start-und end-Zeichenfolge nicht bekannt ist, dann verwenden Sie
str.split
undstr.rsplit
:split(None, 1)
undrsplit(None, 1)
nicht erwähnt, die von vielen anderensplit
-basierte Antworten. Ihre ersten code hätte ein etwas besseres Beispiel, wenn es gefolgt PEP 8, obwohl. 🙂help(str.split)
Hier:
Das aufschneiden macht es die Arbeit für leere Zeichenfolgen zu, und erweitern Sie schön auf eine beliebige Anzahl von Wörtern. Wenn
words
kann nicht leer sein, verwenden Siesplit(None, 1)
undrsplit(None, 1)
.X = words.split()
am Anfang einer längeren Funktion, es sagt mir, ich muss daran erinnern, dass alle Worte sind wichtig, und wird wahrscheinlich verwendet werden. Wenn die beiden Zeilen, die Sie schreiben, sind die letzten, die in einer Funktion und die Funktion wird nicht aufgerufen wiederholt, dann OK.del X
... (Ja, ich bin nicht ernst. Ich sehe Ihren Punkt)Gut, wenn Sie unbedingt wollen, regex, können Sie Gebrauch machen von lookarounds, da Sie nicht verbrauchen Zeichen.
Für eine beliebige Zeichenfolge, könnten Sie vielleicht diese:
Ich gehe davon aus, dass Wörter als nur Buchstaben. Wenn Sie meine Worte als in nicht-Leerzeichen, dann können Sie gehen für
\S
statt[A-Za-z]
.EDIT: Okay, es scheint es gibt mehr zu es. Was ich denke könnte passen ist:
Für die Arbeit der Erde. Für jedes Wort gespeichert in einer variable namens
word
;Akzeptiert:
Ablehnt:
Und danach entpacken Sie das aufgenommene Gruppen oder überprüfen, ob die Gruppe leer sind oder nicht.
Das bit ich Hinzugefügt ist
(?:^|\s)
die prüft, ob das Wort, das Sie suchen, ist der einzige, der in der 'Satz' ist, oder ob das Wort in einem Satz.