Python re.findall 不匹配 HTML 中的 JS 变量
Python re.findall Not Matching JS Variables in HTML
我正在尝试使用 Python 3 re.findall
方法在 HTML 文件中提取 JavaScript 中定义的整数和变量值。
但是,我在匹配 "
中的数字和 \d*
以及匹配 "
中的字母数字字符串时遇到了一些困难。
案例一:
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: []
所需的输出应包含 6876
和 52907
,但获得了一个空列表 []
。
案例二:
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*
,因为 \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)
我正在尝试使用 Python 3 re.findall
方法在 HTML 文件中提取 JavaScript 中定义的整数和变量值。
但是,我在匹配 "
中的数字和 \d*
以及匹配 "
中的字母数字字符串时遇到了一些困难。
案例一:
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: []
所需的输出应包含 6876
和 52907
,但获得了一个空列表 []
。
案例二:
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*
,因为 \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)