我正在处理一个小型的Android应用程序,只要我暂停或我必须重新开始运行就会发出哔哔声。 它非常基本:我只使用正则表达式创建了一个输入验证器,现在我试图解析该输入。
输入就像一个csv,但我希望有重复的组。
例如:2.5,1,5(6,3),1,2.5
意味着2.5分钟的热身,1分钟的步行,然后是5分钟的6分钟的跑步和3分钟的步行......(你希望得到其余部分)
主要问题是在逗号上拆分字符串意味着重复组也会被拆分。我可以在这些组中使用另一个分隔符,但这看起来并不像我一样:)
你有什么想法吗?
谢谢,
Antarion
(顺便说一下:这是我的正则表达式https://regex101.com/r/kJ3rP8/1)
答案 0 :(得分:0)
您的问题是:
如何用逗号分隔字符串,除非它在括号内。
您需要的正则表达式是:
,(?=[^\)]*(?:\(|$))
它的作用:
,
- >用逗号分割字符串
(?=
- >开始'前瞻'。这意味着:仅当跟随字符时才进行拆分:
[^\)]
- >不要关闭括号
*
- >重复0次或更多次
(?:
- >没有捕捉前瞻
\(
- >右括号
|
- >或
$
- >字符串结尾
答案 1 :(得分:0)
正则表达式并不是处理需要状态的解析的正确工具。你最好只是必须解析它。这样的事情,也许是:
Pattern p = Pattern.compile("(.+?)([,()])");
Matcher m = p.matcher(input);
while(m.find) {
String number = m.group(1);
String delim = m.group(2);
if(delim.equals("(")) startRepeatingGroup(number);
else if(delim.equals(")") endRepeatingGroup(number);
else processNextNumber(number)
}