Python как сканировать строку и использовать upper () между двумя символами?

Я новичок, поэтому, пожалуйста, простите меня за этот вопрос. Я хотел бы написать программу, которая увеличивает буквы между символами "<" and ">"

например вход:

<html> randomchars </html>

выход:

<HTML> randomchars </HTML>

как это сделать ?

Я только написал это, но это увеличивает все слова.

while True:             
    inp = input()
    if inp == "":
        break
    elif inp =="<":
        inp=inp.upper()
        print(inp)
    else:
        print(inp)

Спасибо за помощь.

3 ответов


во-первых, давайте "отремонтируем" цикл while, чтобы убрать контроль продолжения. Вместо

while True:
    inp = input()
    if inp == "":
        break
    <process the input>

использовать

inp = input()
while inp != "":
    <process the input>
    inp = input()

Теперь, для внутренностей петли. Нам нужно обработать "inp", чтобы выбросить отмеченные символы в верхний регистр. Мы также хотим сделать это так, чтобы новичок мог понять, соответствуя исходному потоку цикла.

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

    upper_area = False
    out_str = ""
    for char in inp:
        if char == '>':
            upper_area = False
        elif char == '<':
            upper_area = True
        elif upper_area:
            char = char.upper()
        out_str += char

попробовать re.sub;

print re.sub(r"(</?\w+>)", lambda up: up.group(1).upper(), "<tag>input</tag>")

/?\w+ срыв ниже, если вы видите скобочки () делает группу, и мы пытаемся соответствовать между скобками <>;

  • ? будет жадно соответствовать 0 или 1 повторениям предыдущего RE. Следовательно,/? будет соответствовать как начать, так и закончить теги.
  • \w будет соответствовать любому символу слова Юникода, включая a-z, A-Z и 0-9.
  • + будет жадно сопоставьте 1 или более повторений предыдущего RE.

это будет соответствовать большинству тегов, а затем вы можете заменить тег после преобразования в верхний регистр, используя функцию лямбда,up.


вы хотите использовать регулярное выражение для соответствия тегам и передать функцию для изменения соответствия. См. этот предыдущий ответ: создание букв в верхнем регистре с помощью re.sub в python?

def upper_repl(match):
    return match.group(1).upper()

re.sub('(<[^>]*>)', upper_repl, '<span> <hey <annoy!>> </span>')
'<SPAN> <HEY <ANNOY!>> </SPAN>'