我有一些字符串,我想基于破折号分隔,但只有当破折号存在于双花括号之外,如下所示:
{{abc-def}}-123-收益-{{ghi}}应分解为{{abc-def}}、123、收益、{{ghi}}
abc-{{123-def}}-收益-{{ghi}}应分解为abc,{{123-def}},收益,{{ghi}}
我尝试使用正则表达式来做这件事,但不能得到它,因为我是新手与正则表达式。根据一些答案,我可以研究,我尝试了以下部分,但没有得到预期的输出:
String regex = "-(?!\\{\\{^\\{\\{\\}\\}*\\}\\})";
String newRegex = "-(?:[^,\"]|\"[^\"]*\")+-";
String abc = "{{abc-def}}-123-benefit-{{def}}";
String[] output1 = abc.split(regex);
String[] output2 = abc.split(newRegex);
输出1为
["{{abc", "def}}", "123", "benefit", "{{def}}"]
输出2为
["{{abc", "{{def}}"]
预期输出为
["{{abc-def}}", "123", "benefit", "{{def}}"]
4条答案
按热度按时间iqxoj9l91#
您可以匹配正则表达式
Demo
该表达式可以分解如下。
aoyhnmkz2#
这是一个没有答案的问题,但是你花了一个小时才得到一个正则表达式的答案,这花了我20分钟,包括一些简单的测试和评论,这比我想象的要复杂一些,尽管也许可以改进。
我添加了一些注解来说明我正在做的事情,向
parse()
方法添加一些Javadoc也会使它更具可读性。如果你觉得有帮助,请随意复制。
gudnpqoy3#
备选方案:
使用的正则表达式:
请参见下面上下文和测试台中的regex:
输出:
备注:
在此阅读更多关于模式的信息:https://docs.oracle.com/javase/10/docs/api/java/util/regex/Pattern.html
用于测试正则表达式的其他工具:https://regex101.com/
jbose2ul4#
如果你使用
matcher
而不是split
,你的正则表达式会更简单。注意,在你的第一个正则表达式中,^
作为输入锚的开始,所以永远不会匹配。对于
matcher
,可以使用以下正则表达式:代码: