假设我有一个包含多个集合和括号嵌套的字符串。我想只提取遇到的第一个括号中的字符串,包括它包含的任何嵌套括号。
例如:
这(可能是)一个测试(也许不是)
我想提取:
是(也许)
我相信这可以在不使用正则表达式的情况下完成,我可以轻松地完成它。
所以我的问题是如何在没有正则表达式的情况下实现?
答案 0 :(得分:5)
伪代码:
iterate over chars
if char is (
increment counter
store position of first ( only
if char is )
decrement counter
if counter == 0
use index of current char and position of first ( to get substring
答案 1 :(得分:3)
以免伪代码成为我自己用标准算法回答这个问题的唯一答案。鉴于const string foo{ "this (is(maybe)) a test (and maybe not)" }
c++14可以用来解决这个问题:
const auto start = find(cbegin(foo), cend(foo), '(');
const auto finish = find_if(start, cend(foo), [count = 0](const char i) mutable {
if (i == '('){
count++;
}
else if (i == ')'){
count--;
}
return count <= 0; });
从此处开始,如果start
和finish
都不是cend(foo)
,则该字符串有效且可以从string(next(start), finish)
(Live Example)获取。
这可能是与C ++一样好的解决方案。我想这只是一厢情愿的想法,那里有一些与括号匹配并找到价值的东西。