2 Stimmen

Wie kann ich diese Regex in Python ausführen?

Angenommen, ich habe eine Textfolge, die aus allen lateinischen Zeichen besteht. Mit Interpunktion.

Wie "finde" ich alle Zeichen und setze sie <strong> Markierungen um sie herum?

hay = The fox jumped up the tree.
needle = "umpe"

In diesem Fall würde ein Teil des Wortes "gesprungen" hervorgehoben werden.

4voto

ChristopheD Punkte 106139

Ohne Regex (kann etwas ausführlicher sein, ist aber auch einfacher zu verstehen):

hay = "The fox jumped up the tree."
needle = "umpe"

print hay.replace(needle, "<strong>%s<strong>" % needle)

EDIT nach zusätzlichen Angaben: wenn Sie die Groß- und Kleinschreibung nicht berücksichtigen wollen (was bei einer regulären Zeichenfolge nicht möglich ist):

import re

hay = "The fox jUMPed up the tree."
needle = "umpe"

regex = re.compile('(%s)' % needle, re.I)
print regex.sub('<strong>\\1</strong>', hay)

3voto

GreenMatt Punkte 17578

Die Verwendung regulärer Ausdrücke für einen einfachen Suchausdruck wie diesen ist ein Overkill. Falls Sie jedoch eine kompliziertere Suche benötigen, verweise ich auf Python's re Modul Dokumentation um den nachstehenden Code zu erstellen, der meiner Meinung nach genau das tut, was Sie wollen:

#!/usr/bin/env python
import re
haystack = "The fox jumped up the tree."
needle = "umpe"
new_text = "<strong>" + needle + "</strong>"
new_haystack = re.sub(needle, new_text, haystack)
print new_haystack

1voto

codaddict Punkte 426877

Ihre Frage ist nicht sehr klar. Wenn Sie die Wörter hervorheben möchten, in denen Nadel vorkommt, können Sie

\b(\w*needle\w*)\b

und ersetzen sie durch

<strong>\1<strong>

1voto

Andriy Drozdyuk Punkte 53902

In diesem Fall wird kein Regex verwendet, aber bei kleineren Zeichenketten funktioniert es.

hay = "The fox jumped up the tree."
needle = "umpe"

hay_lower = hey.lower()
found = []
curr_find = hay_lower.find(needle.lower())
found.append(curr_find)
hay_list = list(hay)

while(curr_find):
    curr_find = hay_lower.find(needle.lower(), curr_find)

for found_index in found:
   hay_list[found_index:found_index+len(needle)] = '<strong>%s</strong>' % needle

result = ''.join(hay_list)

1voto

doug Punkte 67204

Das sollte funktionieren:

pattern = r'(?P<needle>(umpe))'
pat_obj = re.compile(pattern)
new_text = pat_obj.sub(r'<strong>\g<needle></strong>', hay)

Das Ergebnis wird in HTML wiedergegeben: Der Fuchs j umpe d den Baum hinauf.

Im obigen Ausschnitt habe ich die re-Methode "sub" verwendet und auf eine erfasste Gruppe verwiesen (die ich "needle" genannt habe).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X