用正则表达式捕获替换字符串

时间:2016-02-24 06:35:08

标签: regex

来自here的问题。

输入:

name 1111 color shape
name 2222 shape color
name 3333 shape
name (4444) color shape version
name.5555.JUNK.color.JUNK.shape.JUNK.version.JUNK

期待:

name (1111) color shape
name (2222) color shape
name (3333) shape
name (4444) color shape version
name (5555) color shape version

我试试:

(name).\(?(\d{4})\)?.(?=.*?(color))(?=.*(shape))(?=.*?(version)?).*?$

替换:$ 1($ 2)$ 3 $ 4 $ 5

name (1111) color shape 
name (2222) color shape 
name (4444) color shape 
name (5555) color shape

其他

 (name).\(?(\d{4})\)?.(?=.*?(color))(?=.*(shape))(?=.*?(version)).*?$

name (4444) color shape version
name (5555) color shape version

我如何改进我的正则表达式验证? 感谢。

1 个答案:

答案 0 :(得分:0)

如果你不介意可能有一些尾随空格,这可以很简单:

(name).\((\d{4})\)(?:.*?(color)(?:.*?(shape)(?:.*?(version))?)?)?

如果你想让它更简单,不要忘记浪费更多的时间来评估:

(name).\((\d{4})\).*?(color)?.*?(shape)?.*?(version)?

对于这两个,替换为

$1 ($2) $3 $4 $5

会给你你想要的东西,至少我是否正确理解了这个问题。