Исключить данную строку, используя Regex в Python - PullRequest
0 голосов
/ 27 сентября 2018

Я хочу исключить все после того, как 'un' встречается в любой заданной строке.Ниже мой код, он выводит только французский!Le @ Mans - Quevilly Ro вместо французского!Le @ Mans - Кевилли Руан любая помощь в том, как это решить, будет оценена.

import requests, bs4, re

get_reg = re.compile(r'''
    ([\w+\W+]*(\s\w+)*\s-\s+\w+[^'un']*)  #teams
    (\s\w+\s) #tip
    (@\d+.\d+)
    ''', re.VERBOSE)
print(get_reg.findall("French! Le@ Mans - Quevilly Rouen un3.5 @1.23"))

1 Ответ

0 голосов
/ 27 сентября 2018

[] соответствует любому символов внутри него, поэтому [\w+\W+] соответствует любому символу, который является либо символом слова, либо не символом слова, либо +, что явно не то, что выпредназначена.Точно так же, [^'un'] соответствует любому символу, который не относится к ', u или n.

Решение вопроса, как вы его задали,is:

re.findall(r'(.*?)\s*un', "French! Le@ Mans - Quevilly Rouen un3.5 @1.23")

Демонстрация: https://regexr.com/40806

Это не жадное совпадение со всем, что сопровождается пробелами и un, и возвращает эту первую часть обратно в группу.

Однако из вашего кода видно, что вы пытаетесь сопоставить и другие части строки, и из обсуждения в комментариях я думаю, что вы хотите:

get_reg = re.compile(r'(.*?)\s*(un\d+.\d+)\s*(@\d+.\d+)')
print(get_reg.findall("French! Le@ Mans - Quevilly Rouen un3.5 @1.23"))

Демонстрация: https://regexr.com/4085t

Я исключил пробелы между частями из соответствующих групп, хотя это отличается от вашего примера, потому что я подозреваю, что это будет более полезным для вас.

...