【发布时间】:2011-04-21 14:10:48
【问题描述】:
以下 python 脚本允许我使用正则表达式从给定文件中抓取电子邮件地址。
如何添加此内容以便我也可以获取电话号码?比如说,如果是 7 位或 10 位(带区号),还要考虑括号?
我当前的脚本可以在下面找到:
# filename variables
filename = 'file.txt'
newfilename = 'result.txt'
# read the file
if os.path.exists(filename):
data = open(filename,'r')
bulkemails = data.read()
else:
print "File not found."
raise SystemExit
# regex = something@whatever.xxx
r = re.compile(r'(\b[\w.]+@+[\w.]+.+[\w.]\b)')
results = r.findall(bulkemails)
emails = ""
for x in results:
emails += str(x)+"\n"
# function to write file
def writefile():
f = open(newfilename, 'w')
f.write(emails)
f.close()
print "File written."
电话号码的正则表达式:
(\d{3}[-\.\s]\d{3}[-\.\s]\d{4}|\(\d{3}\)\s*\d{3}[-\.\s]\d{4}|\d{3}[-\.\s]\d{4})
电话号码的另一个正则表达式:
(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?
【问题讨论】:
-
你有电话号码的正则表达式供我们批评吗?
-
我刚刚在我的帖子中添加了我所拥有的电话号码。难以检测没有连字符的 7 位或 10 位数字。
-
只有一个“国家”/系统还是全世界?您需要区分手机/移动电话和固定电话吗?您需要区分特殊用途的数字,例如 800 数字吗?可能的 + 前缀?
-
我希望保持相对简单。所以不用担心国家代码。它应该能够接受带或不带括号的区号。或者也只是简单的 7 位数字。不需要区分数字,例如 800 个数字。