#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}"