假设我有一个字符串
Max and Bob and Merry and {Jack and Co.} and Lisa
。
我需要将其分隔为and
作为分隔符,但前提是它不会出现在花括号中。
所以从上面的字符串我应该得到5个字符串:
Max
,Bob
,Merry
,Jack and Co.
,Lisa
。
我尝试过这样的模式:
[^\\\{.+]\\band\\b[^.+\\\}]
但它不起作用 - Jack
和Co.
仍然是分开的(我使用C ++所以我必须两次转义特殊字符。)
答案 0 :(得分:2)
如果QRegExp支持lookaheads,您可以通过查看最后一个字边界检查内部是否有mtrs[k]
with no opening }
{
需要根据需要进行转义或尝试@SMeyer评论的原始字符串文字。
答案 1 :(得分:1)
这是一个可能的解决方案,部分基于bobble-bubble的评论。它将按要求生成五个字符串,不包含空格或大括号。
std::string text = "Max and Bob and Merry and {Jack and Co.} and Lisa";
std::regex re(R"(\}? +and +(?![^{]*\})\{?)");
std::sregex_token_iterator it(text.begin(), text.end(), re, -1);
std::sregex_token_iterator end;
while (it != end)
std::cout << *it++ << std::endl;
我试图保持简单,您可能希望用完整的空格检测替换and
周围的空格。可以使用交互式版本here。
答案 2 :(得分:0)
让{...}
部分先匹配。也就是说,将它放在|
的左侧。
\{.*?\}|and
如果可能,该匹配{foo and bar}
,如果不匹配,则会尝试匹配and
。