如何通过正则表达式处理此字符串

时间:2010-04-07 10:09:19

标签: regex string

我的字符串样式就像这样

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),则为其添加括号。

2 个答案:

答案 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("/");