我是Python的初级学生。以下是我必须从网页中查找电子邮件地址实例的代码。
page = urllib.request.urlopen("http://website/category")
reg_ex = re.compile(r'[-a-z0-9._]+@([-a-z0-9]+)(\.[-a-z0-9]+)+', re.IGNORECASE
m = reg_ex.search_all(page)
m.group()
当我运行它时,Python模块说有一个无效的语法,它就在线上:
m = reg_ex.search_all(page)
有人会告诉我它为什么无效吗?
答案 0 :(得分:5)
考虑另一种选择:
## Suppose we have a text with many email addresses
str = 'purple alice@google.com, blah monkey bob@abc.com blah dishwasher'
## Here re.findall() returns a list of all the found email strings
emails = re.findall(r'[\w\.-]+@[\w\.-]+', str)
## ['alice@google.com', 'bob@abc.com']
for email in emails:
# do something with each found email string
print email
来源:https://developers.google.com/edu/python/regular-expressions
答案 1 :(得分:2)
此行没有关闭)
:
reg_ex = re.compile(r'[a-z0-9._]+@([-a-z0-9]+)(\.[-a-z0-9]+)+', re.IGNORECASE)
另外,你的正则表达式无效,试试这个:
"[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+"
仅供参考,使用正则表达式验证电子邮件并非易事,请参阅以下主题:
答案 2 :(得分:2)
此外,reg_ex
没有search_all
方法。你应该传递page.read()
。
答案 3 :(得分:1)
重新模块
没有.search_all
方法
您正在寻找的是.findall
你可以尝试
re.findall(r"(\w(?:[-.+]?\w+)+\@(?:[a-zA-Z0-9](?:[-+]?\w+)*\.)+[a-zA-Z]{2,})", text)
我认为text
是要搜索的文字,在您的情况下应为text = page.read()
或者您需要编译正则表达式:
r = re.compile(r"(\w(?:[-.+]?\w+)+\@(?:[a-z0-9](?:[-+]?\w+)*\.)+[a-z]{2,})", re.I)
results = r.findall(text)
注意:
.findall
返回匹配列表
如果您需要迭代以获得匹配对象,则可以使用.finditer
(来自之前的例子)
r = re.compile(r"(\w(?:[-.+]?\w+)+\@(?:[a-z0-9](?:[-+]?\w+)*\.)+[a-z]{2,})", re.I)
for email_match in r.finditer(text):
email_addr = email_match.group() #or anything you need for a matched object
现在问题是您必须使用的Regex:)
答案 4 :(得分:0)
将r'[-a-z0-9._]+@([-a-z0-9]+)(\.[-a-z0-9]+)+'
更改为r'[aA-zZ0-9._]+@([aA-zZ0-9]+)(\.[aA-zZ0-9]+)+'
。 a-z 之前的-
字符是原因