Python中的正则表达式,我不确定哪里出错了
我刚开始学习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 个回答
在编程中,有时候我们需要让程序在特定的条件下执行某些操作。这就像给程序设定了一些规则,只有当这些规则被满足时,程序才会继续运行。比如,你可能希望程序在用户输入正确的密码后才能进入系统,这就是一个条件判断的例子。
条件判断通常是通过一些关键字来实现的,比如“如果”(if)和“否则”(else)。当程序运行到“如果”这部分时,它会检查条件是否成立。如果成立,程序就会执行“如果”后面的代码;如果不成立,程序就会执行“否则”后面的代码。
这种方式让程序变得更加灵活,因为它可以根据不同的情况做出不同的反应。就像在生活中,我们会根据天气的好坏决定是否出门一样,程序也可以根据输入的不同来决定下一步该做什么。
总之,条件判断是编程中非常重要的一部分,它帮助我们控制程序的执行流程,让程序能够根据不同的情况做出相应的反应。
"\d{3}.\d{3}.\d{4}" write raw string r"\d{3}.\d{3}.\d{4}"
/\d{3}.\d{3}.\d{4}/g
- 这里的 /../
是用来表示正则表达式的,在其他语言中像Ruby会用到,而后面的g是一个标志,在Python中并不适用。你可以试着去掉这些部分,只用 \d{3}.\d{3}.\d{4}
。
另外,我觉得你想用的输出/响应应该是在findall里,而不仅仅是web,这就是你看到 expected string or buffer
的原因。你还应该去掉那行只执行 web.readlines()
的代码。
所以你可能想要做的事情可以像这样:
numbers = re.findall("\d{3}.\d{3}.\d{4}", web.read())