Как создать Regex на основе пользовательского ввода (Python) - PullRequest
0 голосов
/ 11 сентября 2018

Я довольно новичок в Python, и сейчас я изучаю Regexes, что было для меня непростой задачей. Моя проблема сейчас заключается в том, что я работаю над проблемой, которая заключается в создании функции, которая является версией Regex строкового метода strip ().

Моя проблема в том, что я не могу понять, как преобразовать символ, который пользователь вводит в регулярное выражение, без перечисления всех возможностей в программе с помощью операторов if. Например:

def regexStrip(string, char):
    if char = 'a' or 'b' or 'c' etc...
        charRegex = re.compile(r'^[a-z]+')

Это не моя полная программа, всего несколько строк, чтобы продемонстрировать, о чем я говорю. Мне было интересно, может ли кто-нибудь помочь мне найти более эффективный способ преобразования пользовательского ввода в регулярное выражение.

1 Ответ

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

Вы можете использовать фигурные скобки внутри строк и функцию format для построения регулярного выражения.

def regexStrip(string, char=' '):
    #Removes the characters at the beginning of the string
    striped_left = re.sub('^{}*'.format(char), '', string)
    #Removes the characters at the end of the string
    striped = re.sub('{}*$'.format(char), '', striped_left)
    return striped

Метод strip в python позволяет использовать несколько символов, например, вы можете сделать 'hello world'.strip (' hold ') и он вернет' o wor '

Для этого вы можете сделать:

def regexStrip(string, chars=' '):
    rgx_chars = '|'.join(chars)
    #Removes the characters at the beginning of the string
    striped_left = re.sub('^[{}]*'.format(rgx_chars), '', string)
    #Removes the characters at the end of the string
    striped = re.sub('[{}]*$'.format(rgx_chars), '', striped_left)
    return striped

Если вы хотите использовать поиск вместо совпадений, вы можете сделать:

def regexStrip(string, chars=' '):
    rgx_chars = '|'.join(chars)
    striped_search = re.search('[^{0}].*[^{0}]'.format(rgx_chars), string)
    if striped_search :
        return striped_search.group()
    else:
        return ''
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...