正则匹配错误

8 投票
5 回答
14442 浏览
提问于 2025-04-15 13:33

我刚开始学习Python(之前也没有编程的训练),所以请理解我提问时的情况。

我想在获取到的网页中搜索,并找到所有符合特定模式的链接。我在其他脚本中成功做过这件事,但这次遇到了一个错误,错误信息是:

raise error, v # invalid expression

sre_constants.error: multiple repeat

我必须承认我不知道为什么会这样,但毕竟我对Python和正则表达式还不太熟悉。不过,即使我不使用模式,而是直接用一个具体的链接(只是为了测试匹配),我也觉得没有返回任何匹配的结果(当我打印match.group(0)时,窗口里什么都没有显示。下面的链接是我测试的,但被注释掉了。)

有没有什么建议?我通常通过实例学习比较容易,但任何建议我都会非常感激!

布洛克

import urllib2
from BeautifulSoup import BeautifulSoup
import re

url = "http://forums.epicgames.com/archive/index.php?f-356-p-164.html"
page = urllib2.urlopen(url).read()
soup = BeautifulSoup(page)

pattern = r'<a href="http://forums.epicgames.com/archive/index.php?t-([0-9]+).html">(.?+)</a> <i>((.?+) replies)'
#pattern = r'href="http://forums.epicgames.com/archive/index.php?t-622233.html">Gears of War 2: Horde Gameplay</a> <i>(20 replies)'

for match in re.finditer(pattern, page, re.S):
    print match(0)

5 个回答

1

这意味着你的正则表达式有错误。

(.?+)</a> <i>((.?+)

那么,?+是什么意思呢?这两个符号都是特殊字符,放在一起是没有意义的。可能是你忘记给'?'加上转义符了,或者其他什么原因。

1

你需要对你想要匹配的字符 '?' 和 '(' 和 ')' 进行转义,也就是说要告诉程序这些字符是字面意思,而不是特殊符号。

另外,关于 '?+',我觉得你应该使用 '+?' 这个非贪婪匹配的方式。

这里有更多的文档说明。

对于你的情况,可以试试这个:

pattern = r'<a href="http://forums.epicgames.com/archive/index.php\?t-([0-9]+).html"> (.+?)</a> <i>\((.+?) replies\)'
0

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在另一个地方使用这些数据。这个过程就像是把水从一个水桶倒到另一个水桶里。

有些时候,我们需要确保在这个过程中数据不会丢失或者被错误地修改。这就像是我们在倒水的时候,要小心不要洒出来。

为了做到这一点,程序员会使用一些工具和方法来管理这些数据,确保它们在转移的过程中是安全的。这就像是用一个漏斗来帮助我们更顺利地倒水,避免洒出来。

总之,处理数据就像是一个小小的搬运工,确保每一滴水都能安全到达目的地。

import urllib2
import re
from BeautifulSoup import BeautifulSoup

url = "http://forums.epicgames.com/archive/index.php?f-356-p-164.html"
page = urllib2.urlopen(url).read()
soup = BeautifulSoup(page)

# Get all the links
links = [str(match) for match in soup('a')]

s = r'<a href="http://forums.epicgames.com/archive/index.php\?t-\d+.html">(.+?)</a>' 
r = re.compile(s)
for link in links:
    m = r.match(link)
    if m:
        print m.groups(1)[0]

撰写回答