Regex-версия Strip () - автоматизируйте скучный материал с Python - PullRequest
0 голосов
/ 06 февраля 2020

Я пытался научиться кодировать с книгой Аль Суигерта. Прямо сейчас я застрял в том, чтобы заставить программу получать текст и / или аргумент из одного ввода. Я знаю, что проще использовать два отдельных входа, но я хочу сделать это, используя только один.

Я также не знаю, в чем разница между r 'и rf' в Regex.

#python 3
#A program that does exactly the same thing as the split function  
import re
def striperoo(text, argument):
    if argument != '':
        argRegex = re.compile(rf'{argument}')
        while True:
            argCheck = argRegex.search(text)
            if argCheck != None:
                startOfArg = argCheck.span()[0]
                endOfArg = argCheck.span()[1]
                text = text[:startOfArg] + text[endOfArg:]
            else:
                print(text)
                break
    else:
        spcRegexBegin = re.compile(r'^\s+')
        spcRegexEnd = re.compile(r'\s+$')
        while True:
            spcAtBeginning = spcRegexBegin.search(text)
            spcAtEnd = spcRegexEnd.search(text)
            if spcAtBeginning != None:
                blankSpacesSpan = spcAtBeginning.span()[1]
                text = text[blankSpacesSpan:]
            elif spcAtEnd != None:
                spacesAtEnd = spcAtEnd.span()[0]
                text = text[:spacesAtEnd]
            else:
                print(text)
                break

texto, argumento = input('Please type text and argument using the format text, argument: ').split(', ')
striperoo(texto, argumento)

Может ли кто-нибудь помочь мне? Как и ожидалось, когда я набираю только одну переменную, появляется следующая ошибка:

Traceback (most recent call last):
  File "C:\strip.py", line 33, in <module>
    texto, argumento = input('Please type text and argument using the format text, argument: ').split(', ')
ValueError: not enough values to unpack (expected 2, got 1)

Она должна преобразовывать строки вроде ' Hola mundo cruel ' в 'Hola mundo cruel' и 'AholaAmundoAcruel, A' в 'holamundocruel'.

Спасибо

Хайме

1 Ответ

0 голосов
/ 06 февраля 2020

Если в пользовательском вводе нет ', ', .split выдаст список с 1 элементом, вы можете проверить его в действии соответственно

userinput = input('Please type text and argument using the format text, argument: ').rsplit(', ', maxsplit=1)
if len(userinput) == 1:
    texto, argumento = userinput[0], ''
else:
    texto, argumento = userinput

Обратите внимание, что я использую rsplit с maxsplit установите 1, что означает, что list из len будет не больше 2, тогда как split без maxsplit может дать более длинный список. Это означает, что если пользовательский ввод имеет более одного ', ', он будет разбит только на самый правый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...