使用高级正则表达式在java中拆分字符串
我尝试在java中使用字符串拆分,在子字符串之间拆分整个文档 制表符是空格和换行符,但我想排除引号之间存在单词的情况
例如:
这个文件
CATEGORYTYPE1
{
CATEGORYSUBTYPE1
{
OPTION1 “ABcd efg1234”
OPTION2 ABCdefg12345
OPTION3 15
}
CATEGORYSUBTYPE2
{
OPTION1 “Blah Blah 123”
OPTION2 Blah
OPTION3 10
OPTION4 "Blah"
}
}
拆分到这些子字符串(如Eclipse调试器中所示):
[CATEGORYTYPE1, {, CATEGORYTYPE1, {, OPTION1, “ABcd, efg1234”, OPTION2....
当我使用当前正则表达式时,如下所示:
String regex = "([\\n\\r\\s\\t]+)";
String[] tokens = data.split(regex);
但我想实现的是这样分割它:
[CATEGORYTYPE1, {, CATEGORYTYPE1, {, OPTION1, “ABcd efg1234”, OPTION2....
(不在引号之间拆分内容)
正则表达式可以这样做吗?如何实现
# 1 楼答案
在这里使用拆分似乎比较复杂,甚至不够,使用查找更容易,请尝试以下方法:
如果需要添加其他类型的引号(例如:
“xxxxx xxxxx”
),可以轻松地将它们添加到模式中:您可以通过以下方式允许转义双引号(
"xxx \"xxx\""
):# 2 楼答案
我知道我很晚才入党,但如果你也在寻找一个花哨的正则表达式来“理解”逃逸
"
,这个应该适合你:它还将解析如下内容:
ab "cd \"ef\" gh" ij "kl \"no pq\"\" rs"
致:
ab
,"cd \"ef\" gh"
,ij
,"kl \"no pq\"\" rs"
(不要被奇数个转义引号(\"
)弄糊涂)(可能是无关的),但是这个词也会在字符串的中间“理解”^ {CD1>},所以它将解析这个:^ {}::^ {< CD3>},^ {< CD11>},^ {CD12>} -而不是这样的模式很可能出现。p>
无论如何,你也可以看看这个short demo
# 3 楼答案
以下是一种方法:
解释:表示匹配空格或新行(
\s
),后跟偶数双引号("
)。因此,两个双引号字符之间的\s
将不会在拆分中使用,外部字符将被匹配(因为这些字符后面是偶数个双引号字符)