如何处理通过正则表达式这个字符串
我的字符串装饰这样如何处理通过正则表达式这个字符串
expression1/field1+expression2*expression3+expression4/field2*expression5*expression6/field3
一个真正的风格mybe这样的:
computer/(100)+web*mail+explorer/(200)*bbs*solution/(300)
“+”和“*”代表运营商 “计算机” ,“web”...表示表达式 (100),(200)表示字段num。字段num可能不存在。
我想要的字符串处理这样:
<computer>/(100)+web*<mail>+explorer/(200)*bbs*<solution>/(300)
规则这样
如果表达式长度大于3及其字段不是(200),然后添加括号到它。
我的建议是将正则表达式与其他语言功能混合使用。并发症来自于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("/");
不错。我用过它 – iiduce 2010-04-08 02:38:30
我不会用只是正则表达式。
你说:“如果表达式长度大于3及其字段不是(200),然后加括号它”
我认为一个正常的条件语句是我们的最佳和最清晰的solutoion。
我认为正则表达式有时会被滥用。正则表达式很难阅读,当一对条件语句可以做同样的事情,但更清楚时,我会说代码质量更高。
我不同意正则表达式被过度使用/难以阅读。之所以不适合这里的原因是因为'field'出现在'expression'之前,并且括起来,而且往后看往往比lookforward更有限。如果'field'出现在'expression'的末尾,这实际上非常简单,正则表达式非常可读。 – polygenelubricants 2010-04-07 10:38:21
举些例子。一些有用的。 – polygenelubricants 2010-04-07 10:13:32
@iiduce,假设你的头像不是你现在看起来的样子,请尝试像长大一样写。 :) – 2010-04-07 10:20:50
为什么不把'explorer'括起来?为什么是'解决方案'? – polygenelubricants 2010-04-07 10:33:11