【问题标题】:Python re.findall Not Matching JS Variables in HTMLPython re.findall 不匹配 HTML 中的 JS 变量
【发布时间】:2021-12-23 14:02:18
【问题描述】:

我正在尝试使用 Python 3 re.findall 方法在 HTML 文件中提取 JavaScript 中定义的整数和变量值。

但是,我在将" 中包含的数字与\d* 匹配时遇到了一点困难,并且我也很难匹配" 中包含的字母数字字符串。

案例 1:

s = """
   <script>
    var i = 1636592595;
        var j = i + Number("6876" + "52907");
   </script>
"""
pattern = r'var j = i + Number(\"(\d*)\" + \"(\d*)\");'
m = re.findall(pattern, s)
print(m) # Output: []

所需的输出应包含687652907,但获得了一个空列表[]

案例 2:

s = """
       xhr.send(JSON.stringify({
              "bm-foo": "AAQAAAAE/////4ytkgqq/oWI",
              "pow": j
          }));
"""
pattern = r'"bm-foo": \"(\w*)\",'
m = re.findall(pattern, s)
print(m) # Output: []

所需的输出应该包含AAQAAAAE/////4ytkgqq/oWI,但获得了一个空列表[]

我可以帮忙解释为什么我的正则表达式模式不匹配吗?

【问题讨论】:

  • 您需要转义 + 字符。你不需要逃避"
  • 您还需要转义文字 ( 字符。
  • \w 只匹配字母、数字和_。所以它不会匹配第二个例子中的////

标签: python python-3.x regex re


【解决方案1】:

在第一个正则表达式中,您需要转义 +()

在第二个正则表达式中,使用[^"]* 而不是\w*,因为\w/ 等标点不匹配。

import re

s = """
   <script>
    var i = 1636592595;
        var j = i + Number("6876" + "52907");
   </script>
"""
pattern = r'var j = i \+ Number\("(\d*)" \+ \"(\d*)\"\);'
m = re.findall(pattern, s)
print(m)

s = """
       xhr.send(JSON.stringify({
              "bm-foo": "AAQAAAAE/////4ytkgqq/oWI",
              "pow": j
          }));
"""
pattern = r'"bm-foo": "([^"]*)",'
m = re.findall(pattern, s)
print(m)

DEMO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多