Регулярное выражение в python, не уверен, что я делаю неправильно

#python #regex #urllib #findall

#python #регулярное выражение #urllib #найди все

Вопрос:

Я совсем новичок в Python, и я исследовал столько, сколько мог, прежде чем решил, что должен задать вопрос здесь. Итак, вот в чем проблема:

Я не уверен, что я делаю не так с моим регулярным выражением. Я хотел попробовать re.findall() , поэтому я подумал, что напишу небольшой скрипт, который будет находить номера телефонов на веб-страницах. Вот код, который у меня есть прямо сейчас.

     import re, urllib
    inurl = raw_input("Input a URL: ")
    web = urllib.urlopen(inurl)
    web.readlines()

    numbers = re.findall("/d{3}.d{3}.d{4}/g", web)
    for itm in numbers
        print itm
  

Не уверен, что происходит. Я продолжаю получать ошибку «ожидаемая строка или буфер» для строки, которая имеет

     numbers = re.findall(".....", web)
  

Заранее спасибо.

Комментарии:

1. Я думаю, вам нужно отбросить косые черты и g

Ответ №1:

/d{3}.d{3}.d{4}/g /../ Часть состоит в том, чтобы идентифицировать регулярное выражение на других языках, таких как Ruby, а g — это флаг, также не применимый к Python. Попробуйте удалить их и использовать только d{3}.d{3}.d{4}

Также я думаю, что вы хотели использовать вывод / ответ в findall, а не только в Интернете, поэтому вы видите expected string or buffer . Вы также должны удалить строку, которая просто делает web.readlines()

Итак, то, что вы можете захотеть сделать, будет примерно таким:

 numbers = re.findall("d{3}.d{3}.d{4}", web.read())
  

Комментарии:

1. вы только что исправили мою проблему, вот и все. Большое вам спасибо. Я использовал генератор регулярных выражений. Я понятия не имел, что Ruby был там. Спасибо. У меня вопрос. Я думал, что readlines() прочитает все строки, а затем поместит их в список … или я пропустил чтение в doc.python.org ? lol Я перечитаю документацию, еще раз спасибо!

Ответ №2:

 "d{3}.d{3}.d{4}" write raw string r"d{3}.d{3}.d{4}"