我有一个特定的RegEx问题,仅仅是因为我试图隔离一个项目而不是多个项目。
这是我正在搜索的文字:
"{\"1430156203913\"=>\"ABC\", \"1430156218698\"=>\"DEF\", \"1430156219763\"=>\"GHI\", \"1430156553620\"=>\"JKL", \"1430156793764\"=>\"MNO\", \"1430156799454\"=>\"PQR\"}"
我想要捕获与ABC
相关联的密钥以及与GHI
相关联的密钥
第一个很容易,我用这个RegEx捕获它:
/\d.*ABC/
映射到:"1430156203913\"=>\"ABC
。
然后,我只需使用/\d/
来提取我正在寻找的 1430156203913 键。
第二个是我遇到的困难。
这不起作用:
/\d.*GHI/
映射到第一个数字的开头到我的最终字符串(GHI) - >
1430156203913\"=>\"ABC\", \"1430156218698\"=>\"DEF\", \"1430156219763\"=>\"GHI
问题: 如何编辑第二个正则表达式才能捕获 1430156219763 ?
答案 0 :(得分:1)
答案 1 :(得分:1)
要捕获所有键和值,请使用 String#scan 。
static_assert(foo() == 0, "..");
static_assert(foo() == 1, "..");
static_assert(foo() == 2, "..");
然后获得你想要的任何k / v对,hashify并找到它们。
int main() {
static constexpr int counter = 0;
struct test
{
constexpr int foo(){return counter++;}
};
test myTest;
static_assert(myTest.foo() == 0, "failed");
static_assert(myTest.foo() == 1, "failed");
return 0;
}
答案 2 :(得分:1)
答案 3 :(得分:1)
这是你可以做到的一种方式:
def extract(str, key)
r = /
(?<=\") # match \" in a positive lookbehind
\d+ # match one or more digits
(?= # begin a positive lookahead
\"=>\" # match \"=>\"
#{key} # match value of key
\" # match \"
) # end positive lookahead
/x
str[r]
end
extract str, "ABC" #=> "1430156203913"
extract str, "GHI" #=> "1430156219763"