RegEx в Python, не уверен, что я делаю не так - PullRequest
3 голосов
/ 11 октября 2011

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

Я не уверен, что я делаю неправильно с моим RegEx.Я хотел опробовать функцию 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)

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

Ответы [ 2 ]

3 голосов
/ 11 октября 2011

/\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())
0 голосов
/ 11 октября 2011
"\d{3}.\d{3}.\d{4}" write raw string r"\d{3}.\d{3}.\d{4}"
...