以下 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+))?
最佳答案
如果您对学习 Regex 感兴趣,可以尝试自己编写。这并不像想象的那么难。像 RegexPal 这样的网站允许您输入一些测试数据,然后针对该数据编写和测试正则表达式。使用 RegexPal,尝试添加一些您希望找到的各种格式的电话号码(带括号、区号等),获取 Regex cheatsheet看看你能走多远。如果不出意外,它将有助于阅读其他人的表达方式。
编辑: 这是您的 Regex 的修改版本,它还应该匹配 7 位和 10 位电话号码,没有任何连字符、空格或点。我在字符类([]s)之后添加了问号,这使得它们中的任何内容都是可选的。我在 RegexPal 中对其进行了测试,但由于我仍在学习 Regex,我不确定它是否完美。试试看吧。
(\d{3}[-\.\s]??\d{3}[-\.\s]??\d{4}|\(\d{3}\)\s*\d{3}[-\.\s]??\d{4}|\d{3}[-\.\s]??\d{4})
它与 RegexPal 中的以下值匹配:
000-000-0000
000 000 0000
000.000.0000
(000)000-0000
(000)000 0000
(000)000.0000
(000) 000-0000
(000) 000 0000
(000) 000.0000
000-0000
000 0000
000.0000
0000000
0000000000
(000)0000000
关于python - 在 python 脚本中查找美国电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3868753/