【问题标题】:RegEx in python, not sure what I am doing wrongPython中的RegEx,不确定我做错了什么
【发布时间】:2011-12-04 23:26:47
【问题描述】:

我对 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)

提前致谢。

【问题讨论】:

  • 我认为你需要删除正斜杠和 g

标签: python regex urllib findall


【解决方案1】:

/\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())

【讨论】:

  • 你刚刚解决了我的问题,就是这样。太感谢了。我使用了一个正则表达式生成器。我不知道红宝石在那里。谢谢你。我有个问题。我认为 readlines() 会读取所有行,然后将其放入列表中……还是我错过了在 doc.python.org 上阅读的内容?大声笑我会重新阅读文档,再次感谢您!
【解决方案2】:
"\d{3}.\d{3}.\d{4}" write raw string r"\d{3}.\d{3}.\d{4}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    相关资源
    最近更新 更多