2017-02-13 5 views
0

Ich versuche, die Anzahl der Vorkommen einer Teilzeichenfolge in einer Zeichenfolge in Python zu finden. Aber ich brauche meine Suche, um sehr spezifisch zu sein. Vor der Suche nach den Teilzeichen entferne ich alle Zeichensetzung:Python finde Teilzeichenfolge in Zeichenfolge

myString.translate (None, string.punctuation)

Jetzt suche ich nach der Teilkette. Wenn ich nach dem Teilstring "Hallo Bob" suche und innerhalb des Strings, den ich suche, habe ich den Text "Hallo Bob-etwas anderes" oder "Hallo Bob" zusammen mit anderem Text. Die zwei Zeichen "-" werden nicht entfernt, wenn ich die Interpunktion lösche, weil sie Nicht-Unicode-Zeichen sind, und daher sollten die beiden oben erwähnten Zeichenfolgen nicht als ein Vorkommen des Wortes "Hallo Bob" gezählt werden.

verwendete ich den Code unten regex zu versuchen, die richtige Menge an Vorkommen erhalten, in großen Dateien (3000 Zeilen oder mehr) Ich beginne nicht die richtige Anzahl von Vorkommen der Wörter

counter = 0 
searcher = re.compile("hello bob" + r'([^\w-]|$)').search 
with open(myFile, 'r') as source: 
    for line in source: 
     if searcher(line): 
      counter += 1 

Etwas anderes zu bekommen Ich versuchte

Ich versuche, die Funktion findAll zu verwenden, weil es mir bis jetzt die richtige Anzahl von Vorkommen für ein Wort gebe ich gebe.

ich dies auf Stackoverflow gefunden:

re.findall(r'\bword\b', read)

Gibt es trotzdem ich eine Variable statt Wort verwenden kann?

zum Beispiel möchte ich verwenden:

myPhrase = "hello bob" 
re.findall(r'\bmyPhrase\b', read) 

, die die gleiche sein sollte wie:

re.findall(r'\bhello bob\b', read) 
+0

Geben Sie eine Beispieleingabe und die erwartete Ausgabe an. –

+0

Suchen Sie nach Informationen über re.findAll() – TallChuck

+0

@ juanpa.arrivillaga dies wäre sehr schwer zu tun, weil der obige Code in den meisten Fällen funktioniert, aber auf Texfiles, die groß sind (3000 Zeilen oder mehr) – memoryManagers

Antwort

1

Sie Zeichenfolge ausführen können folgenden Trick interpoliert mit dem Problem zu lösen.

myphrase = "hello bob" 
pattern = r'\b{var}\b'.format(var = myphrase) 
+0

dies funktionierte einwandfrei dank – memoryManagers

+0

@memoryManagers Sie sind herzlich willkommen! : D – Prerit

0

Sie können re.escape(myPhrase) für Variablensubstitution verwenden.

read = "hello bob ! how are you?" 
myPhrase = "hello bob" 
my_regex = r"\b" + re.escape(myPhrase) + r"\b" 

counter = 0 
if re.search(my_regex, read, re.IGNORECASE): 
    counter += 1 
else: 
    print "not found" 
Verwandte Themen