2010-04-07 92 views
0

我的字符串装饰这样如何处理通过正则表达式这个字符串

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),然后添加括号到它。

+1

举些例子。一些有用的。 – polygenelubricants 2010-04-07 10:13:32

+0

@iiduce,假设你的头像不是你现在看起来的样子,请尝试像长大一样写。 :) – 2010-04-07 10:20:50

+0

为什么不把'explorer'括起来?为什么是'解决方案'? – polygenelubricants 2010-04-07 10:33:11

回答

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("/"); 
+0

不错。我用过它 – iiduce 2010-04-08 02:38:30

0

我不会用只是正则表达式。

你说:“如果表达式长度大于3及其字段不是(200),然后加括号它”

我认为一个正常的条件语句是我们的最佳和最清晰的solutoion。

我认为正则表达式有时会被滥用。正则表达式很难阅读,当一对条件语句可以做同样的事情,但更清楚时,我会说代码质量更高。

+0

我不同意正则表达式被过度使用/难以阅读。之所以不适合这里的原因是因为'field'出现在'expression'之前,并且括起来,而且往后看往往比lookforward更有限。如果'field'出现在'expression'的末尾,这实际上非常简单,正则表达式非常可读。 – polygenelubricants 2010-04-07 10:38:21

相关问题