HttpClient устарел на уровне API 22 и удален в API-уровне 23. Вы все равно можете использовать его в API-интерфейсе 23 и далее, если вам нужно, однако лучше всего перейти к поддерживаемым методам обработки HTTP. Итак, если вы компилируете с 23, добавьте это в свой build.gradle:
android {
useLibrary 'org.apache.http.legacy'
}
Не используйте регулярные выражения для синтаксического анализа HTML.
Но если вам нужно найти все совпадения регулярных выражений в строке, используйте findall
.
line = 'bla bla bla<form>Form 1</form> some text...<form>Form 2</form> more text?'
matches = re.findall('<form>(.*?)</form>', line, re.DOTALL)
print(matches)
Вместо использования re.search
используйте re.findall
, он вернет вам все совпадения в List
. Или вы также можете использовать re.finditer
(который мне больше всего нравится), он вернет Iterator Object
, и вы можете просто использовать его для повторения всех найденных совпадений.
line = 'bla bla bla<form>Form 1</form> some text...<form>Form 2</form> more text?'
for match in re.finditer('<form>(.*?)</form>', line, re.S):
print match.group(1)
Make the '.' special character match any character at all, including a newline; without this flag, '.' will match anything except a newline.
(опубликовано это, потому что я считаю, что такие люди, как я, часто бывают в stackoverflow.com, чтобы быстро найти ответы)
– Anton
8 June 2017 в 11:25
Использование регулярных выражений для этой цели является неправильным подходом. Поскольку вы используете python, у вас есть действительно потрясающая библиотека, доступная для извлечения частей из HTML-документов: BeautifulSoup .
'.'
любым символом, включая новую строку; без этого флага,'.'
будет соответствовать любой кроме i> новой строки. ( docs.python.org/2/library/re.html#re.S ) – Petr Viktorin 21 February 2014 в 11:03re.DOTALL
более ясен, я обновил ответ. – Petr Viktorin 23 February 2014 в 01:06