Output
chartData.push({
date: newDate,
visits: 9710,
color: "#016b92",
description: "9710"
});
var newDate = new Date();
newDate.setFullYear(
2007,
10,
1 );
There is another option to get group 1 and the separate digits in group 2 using the Python
regex PyPi module
Regex demodescription:
[\n\r].*description:\s*([^\n\r]*)
这是我第一次使用regex,我有一些问题,希望你能帮我找到答案。我们举一个数据的例子。"9710"
我想检索的是最后一个括号里的日期和相应的描述。我不知道如何用一个regex来做,因此我决定把它分成两部分。
第一部分。
我检索的是最后一个括号后的值 newDate.setFullYear
. 这是用下面的代码管理的。\(([^)]*)\)
输出的结果是带引号的
"{
date: newDate,
visits: 9710,
color: "#016b92",
description: "9710"
}",
"()",
"2007,
10,
1 "
但我可以公正的说,这还算好的,不需要修改。第二部分。这里就很棘手了 我想检索文本后括号内的值。
. 不幸的是,到目前为止,我所做的只是获取括号内的值。为此,我使用了以下代码
结果是它选择了例子中的所有三个括号。
我缺少的是REGEX的AND运算符,它可以让我构造一个代码,允许
检索特定文本后括号内的数据。你们有谁知道如何解决第二部分问题的方法吗?
res = re.search(r'description: "([^"]+)".*newDate.setFullYear\((.*)\);', text, re.DOTALL)
先谢谢你了。
res.groups()
('9710', '\n2007,\n10,\n1 ')
date = res.groups()[1]
[s.strip() for s in date.split(",")]
==>
['2007', '10', '1']
这是我第一次使用regex,我有一些问题,希望你能帮我找到答案。我们举一个数据的例子: chartData.push({ date: newDate, visits: 9710, color: "#016b92", ...import re
test = r"""
chartData.push({
date: 'newDate',
visits: 9710,
color: "#016b92",
description: "9710"
})
var newDate = new Date()
newDate.setFullYear(
2007,
10,
1);"""
m = re.search(r".*newDate\.setFullYear(\(\n.*\n.*\n.*\));", test, re.DOTALL)
print(m.group(1).rstrip("\n").replace("\n", "").replace(" ", ""))
这将返回一个带有两组的regex匹配对象,你可以使用它来获取。
(2007,10,1)
结果是:
newDate.setFullYear(
结果是:
\r?\ndescription: "([^"]+)"(?:\r?\n(?!newDate\.setFullYear\().*)*\r?\nnewDate\.setFullYear\(([^()]+)\);
你所说的AND部分并不是真正的操作符。这个模式是从左到右匹配字符的,所以在捕获第1组中的值后,你要在第2组中捕获你的值之前匹配所有的字符。
你可以做的是,重复匹配下面所有不是以
import re
regex = r"\r?\ndescription: \"([^\"]+)\"(?:\r?\n(?!newDate\.setFullYear\().*)*\r?\nnewDate\.setFullYear\(([^()]+)\);"
test_str = ("chartData.push({\n"
"date: newDate,\n"
"visits: 9710,\n"
"color: \"#016b92\",\n"
"description: \"9710\"\n"
"});\n"
"var newDate = new Date();\n"
"newDate.setFullYear(\n"
"2007,\n"
"10,\n"
"1 );")
print (re.findall(regex, test_str))
然后,当你真的遇到这个值时,就匹配它,并在第2组中捕获匹配除括号以外的所有字符。
[('9710', '\n2007,\n10,\n1 ')]