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>'