#python #regex
#python #регулярное выражение
Вопрос:
Я хочу, чтобы это находило пустые теги, вот пример
txt ="<lol1><><lol2>"
rgx = "<([a-zA-Z_0-9] )>"
print re.findall(rgex, txt)
Я получаю это
['lol1', 'lol2']
Я хочу
['lol1', '', 'lol2']
Как я могу сделать это с помощью regex?
Ответ №1:
Используйте rgx = "<([a-zA-Z_0-9]*)>"
Ключевым моментом является использование *
, что означает «ноль или более из предыдущего», где вы используете
, что означает «один или более».
Ответ №2:
нет необходимости в регулярном выражении
>>> s="txt ="<lol1><><lol2>"
>>> for i in txt.split(">"):
... if "<" in i:
... print i[i.find("<") 1:]
...
lol1
lol2
>>> [i[i.find("<") 1:] for i in txt.split(">") if "<" in i ]
['lol1', '', 'lol2']
Комментарии:
1.
i[i.find("<") 1:]
может быть заменен наi.lstrip('<')
илиi[1:]
.if "<" in i
может быть устранено или заменено наif i.startswith("<")
, что более эффективно и по существу.2. Я знаю, но это более сложный код, чем приведенный здесь, спасибо.