面临的问题:
我想根据空格组分割一个字符串,但是如果它们在方括号内,则不要。
示例:
print(account.root.all()) # QuerySet(q=Q(), folders=[Root (root)])
应该给我
"abc { def ghi Klm} opqr"
所需解决方案:
要做到这一点,最易读,最有效的正则表达式是什么?
我知道可以这样分割空间:
["abc", "{ def ghi Klm}", "opqr"]
但是我不知道该怎么走。
重复的分辨率
这个问题确实已经解决了here(尽管在C#中)。道歉
答案 0 :(得分:2)
您可以使用此正则表达式进行匹配:
/{[^}]*}|\S+/g
此正则表达式使用{[^}]*}
来匹配大括号之间的字符串,或者使用\S+
来匹配1+个非空白字符。
代码:
const regex = /{[^}]*}|\S+/gm;
const str = `abc { def ghi Klm} opqr`;
let m = str.match(regex);
console.log(m);
答案 1 :(得分:1)
在正则表达式中有一种“二元论”,即相同的任务 可以使用图案分割或 匹配其“否定”。
在您的情况下,由于Java风格的正则表达式存在某些限制,
匹配变量更好。使用:/{[^}]*}|\S+/g
查找
在您的文本中匹配。
它包含2种选择:
{[^}]*}
-开括号,}
以外的其他字符
和}
。\S+
-除空格/制表符/换行符以外的非空字符序列。示例代码,在rextester.com上进行了测试,仅使用了 print 用于测试打印输出:
var txt = 'abc { def ghi Klm} opqr xxx';
var res = txt.match(/{[^}]*}|\S+/g);
print("Length: " + res.length);
for (var j in res) {
print(res[j]);
}