python - получить все IP-адреса из файла с регулярным выражением [duplicate]

HttpClient устарел на уровне API 22 и удален в API-уровне 23. Вы все равно можете использовать его в API-интерфейсе 23 и далее, если вам нужно, однако лучше всего перейти к поддерживаемым методам обработки HTTP. Итак, если вы компилируете с 23, добавьте это в свой build.gradle:

android {
    useLibrary 'org.apache.http.legacy'
}
26
задан sed 11 October 2011 в 12:03
поделиться

3 ответа

Не используйте регулярные выражения для синтаксического анализа 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)
45
ответ дан Community 19 August 2018 в 02:14
поделиться
  • 1
    что делает re.S? – Pinocchio 21 February 2014 в 05:09
  • 2
    Делает специальный символ '.' любым символом, включая новую строку; без этого флага, '.' будет соответствовать любой кроме новой строки. ( docs.python.org/2/library/re.html#re.S ) – Petr Viktorin 21 February 2014 в 11:03
  • 3
    О, я вижу, я пошел на веб-страницу, но не понял документацию, потому что ничего не было под re.S, но теперь я вижу, как читать документацию, re.S и re.DOTALL - то же самое ... спасибо! – Pinocchio 21 February 2014 в 18:55
  • 4
    Пожалуйста! re.DOTALL более ясен, я обновил ответ. – Petr Viktorin 23 February 2014 в 01:06

Вместо использования 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)
19
ответ дан Aamir Adnan 19 August 2018 в 02:14
поделиться
  • 1
    что делает re.S? – Pinocchio 21 February 2014 в 05:16
  • 2
    – Aamir Adnan 21 February 2014 в 09:11
  • 3
    re.finditer именно то, что мне нужно! Спасибо! – shellbye 25 April 2016 в 07:06
  • 4
    @Pinocchio docs говорят: re.S - это то же самое, что и re.DOTALL 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 .

4
ответ дан ThiefMaster 19 August 2018 в 02:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: