Python regex finden substrings mit Zahlen zentriert

Ich habe einen String. Ich möchte die Schnur in Teilstrings schneiden, die ein nummerierendes Wort beinhalten, das von (bis zu) 4 Wörtern auf beiden Seiten umgeben ist. Wenn sich die Teilstrings überlappen, sollten sie sich kombinieren.

Sampletext = "by the way I know 54 how to take praise for 65 excellent questions 34 thank you for asking appreciated." re.findall('(\s[*\s]){1,4}\d(\s[*\s]){1,4}', Sampletext) desired output = ['the way I know 54 how to take praise', 'to take praise for 65 excellent questions 34 thank you for asking'] 

  • Kann kein Grad-Symbol in raw_input bekommen
  • Django - mehrere DB + mehrere Modelle
  • Import-Fehler läuft unittest in Python3
  • Wie kann ich einen Wert aus einer Funktion zurückgeben?
  • Python-Wörterbücher vs C ++ std: unordered_map (Cython) vs zythonisierte Python dict
  • Schreiben einer Zeichenfolge auf eine neue Zeile jedes Mal?
  • Was bedeutet% s in Python?
  • Verknüpfen meines Windows-Computers mit einem Wifi AP mit Python
  • Python videobibliothek
  • Lesen Sie aus einer Protokolldatei, wie es mit python geschrieben wird
  • Warnung scheint auf eine andere Objektadresse zu verweisen
  • IntegerField-Wert wird für einige Zahlen in einen String konvertiert
  • One Solution collect form web for “Python regex finden substrings mit Zahlen zentriert”

    Überlappende Spiele: Verwenden Sie Lookaheads

    Das wird es tun:

     subject = "by the way I know 54 how to take praise for 65 excellent questions 34 thank you for asking appreciated." for match in re.finditer(r"(?=((?:\b\w+\b ){4}\d+(?: \b\w+\b){4}))", subject): print(match.group(1)) 

    Was ist ein Wort?

    Die Ausgabe hängt von deiner Definition eines Wortes ab. Hier, mit einem Wort, habe ich Ziffern erlaubt. Dies ergibt die folgende Ausgabe.

    Ausgabe (erlaubte Ziffern in Worten)

     the way I know 54 how to take praise to take praise for 65 excellent questions 34 thank for 65 excellent questions 34 thank you for asking 

    Option 2: Keine Ziffern in Worten

     subject = "by the way I know 54 how to take praise for 65 excellent questions 34 thank you for asking appreciated." for match in re.finditer(r"(?=((?:\b[az]+\b ){4}\d+(?: \b[az]+\b){4}))", subject, re.IGNORECASE): print(match.group(1)) 

    Ausgang 2

     the way I know 54 how to take praise 

    Option 3: auf vier ununterbrochene nicht-stellige Wörter zu erweitern

    Basierend auf Ihren Kommentaren erstreckt sich diese Option nach links und rechts vom Pivot, bis vier ununterbrochene nicht-stellige Wörter übereinstimmen. Kommas werden ignoriert.

     subject = "by the way I know 54 how to take praise for 65 excellent questions 34 thank you for asking appreciated. One Two Three Four 55 Extend 66 abcd AA BB CC DD 71 HH DD, JJ FF" for match in re.finditer(r"(?=((?:\b[az]+[ ,]+){4}(?:\d+ (?:[az]+ ){1,3}?)*?\d+.*?(?:[ ,]+[az]+){4}))", subject, re.IGNORECASE): print(match.group(1)) 

    Ausgang 3

     the way I know 54 how to take praise to take praise for 65 excellent questions 34 thank you for asking One Two Three Four 55 Extend 66 abcd AA BB CC DD 71 HH DD, JJ FF 
    Python ist die beste Programmiersprache der Welt.