Python demo

问题描述 投票:0回答:1
Example code

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运算符,它可以让我构造一个代码,允许

检索特定文本后括号内的数据。
python regex
1个回答
0
投票

你们有谁知道如何解决第二部分问题的方法吗?

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", ...

0
投票
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)
结果是:

0
投票

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 ')]

注册表演示

© www.soinside.com 2019 - 2024. All rights reserved.