Python正则表达式查找字符串并获取x个字母转义不起作用

2024-10-17 08:36:28 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,通过以下im将网页中的脚本添加到dict中,然后尝试在其中查找某个字符串,然后获取后面的13个字母:

for link in productlinks:
    try:
        s = HTMLSession()
        r = s.get(link)
        response = urllib3.PoolManager().request(
            "GET", link, headers={'User-Agent': "python"})
        soup = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
        title = r.html.find('h1.rd-title', first=True).text
        script2 = []
        script1 = soup.findAll("script")[2]
        script2.append(script1)
        special_string = '"ean",values:[{text:"'
        x_letters_afterwards = 13
        result = re.findall(re.escape(special_string) + ".{" + x_letters_afterwards + "}", script2)
        print(result)
    except:
        print("...")

问题是for循环try似乎通过某个东西中断为一个except,因为它总是打印“…”而不是我试图提取的字符串(或者一般的其他东西)

应在其中找到字符串的输出示例:https://pastebin.com/xvzQ456P

我不知道该怎么办


Tags: 字符串textforstringtitleresponsehtmllink
1条回答
网友
1楼 · 发布于 2024-10-17 08:36:28

您的script2是一个对象列表。您需要获取字符串并将其传递给re方法

但是,您正在使用re.findall来获取匹配项的列表。您只需使用re.search即可获得第一个匹配项:

special_string = '"ean",values:[{text:"'
x_letters_afterwards = 13
match = re.search(re.escape(special_string) + "(.{" + x_letters_afterwards + "})", ' '.join([x for x in script1]))
result = ''
if match:
    result = match.group(1)

注:

  • re.escape(special_string)-re.escapespecial_string字符串中的每个特殊正则表达式字符之前追加一个\转义符,该字符串在正则表达式中使用
  • "(.{" + x_letters_afterwards + "})"将形成一个捕获组(ID=1),该组看起来像(.{13}),并且将捕获除换行符以外的任何13个字符,并将其放入组1
  • 在访问组值之前,您需要首先检查是否存在匹配项,因此,if match:检查
  • 一旦检查为正,则存在匹配项,match.group(1)中的组1值被分配给result

相关问题 更多 >