我的字符串样式就像这样
expression1/field1+expression2*expression3+expression4/field2*expression5*expression6/field3
像这样的真实风格mybe:
computer/(100)+web*mail+explorer/(200)*bbs*solution/(300)
“+”和“*”代表运算符 “计算机”,“网络”......代表表达 (100),(200)表示字段num。字段num可能不存在。
我想要将字符串处理为:
<computer>/(100)+web*<mail>+explorer/(200)*bbs*<solution>/(300)
像这样的规则
如果表达式长度大于3且其字段不是(200),则为其添加括号。
答案 0 :(得分:0)
我不会使用只是正则表达式。
你说“如果表达式长度大于3且其字段不是(200),那么为它添加括号”
我认为正常的条件陈述是最好和最清晰的解决方案。
我认为正则表达式有时会被滥用。正则表达式难以阅读,当一些条件语句可以做得同样但更清楚时,我会说代码质量更高。
答案 1 :(得分:0)
我的建议是将正则表达式与其他语言功能混合使用。复杂性源于field
出现在expression
之前的事实,而且后视通常比前瞻性更有限。
在伪Java代码中,我建议这样做:
String[] parts = input.split("/");
for (int i = 0; i < parts.length; i++) {
if (!parts[i].startsWith("(200)"))
parts[i] = parts[i].replaceAll("(?=[a-z]{4})([a-z]+)", "<$1>");
}
String output = parts.join("/");