2012-04-03 86 views
0

我有下面的格式创建样品的测量设备:麻烦创建正则表达式

V GL020(1)=20110117161703

另一个例子:

V GLXX011(10)=ADEF=*GFSDAS

我试图做的是创建一个正则表达式,第一个示例返回 GL020/1/20110117161703,第二个示例返回 GLXX011/10/ADEF=*GFSDAS

我发现可靠的拳头两个必需的部分相匹配的正则表达式:

.*?(?<Field>(?:[a-z][a-z]*[0-9]+[a-z0-9]*)).*?(?<Count>\d+)

但是,我还是第"="后缺少的一部分。我不知道它是否重要,但第一个"="之后的部分可能包含"="本身的字符。

+0

你遇到麻烦等号和之后的所有匹配?然后匹配一个等号+随后的所有内容(当然包括更多的等号) – keyser 2012-04-03 11:18:03

+0

难道你不能只跳过前两个字符('V')并用'('和')=替换'/'(如果它很重要,只是它们的第一次出现)? – Eric 2012-04-03 11:21:59

回答

4

你可以使用类似的表达式:

(\w+)\((\d+)\)=(\S+) 

给你,你在第一,第二和第三捕获组希望子。

+0

+1我几乎有完全相同的东西... – Robbie 2012-04-03 11:22:58

+0

大声笑。哇。太简单。我在那一个上花了几个小时。 :((。非常感谢你,第三个捕获组也可能包含空格,我将如何处理它? – lightxx 2012-04-03 11:23:22

+0

@lightxx,如果你只是想在第一个'='之后捕获所有的东西,你可以改变'\ S +'到'。+'。('.'不匹配新行,除非你使用's'标志。) – Qtax 2012-04-03 11:25:31

1

尝试使用这一个:

([^\(|\s]+)\((\d+)\)=([\w|\=|\*]+) 
+0

抱歉,根本不工作。错字? – lightxx 2012-04-03 11:25:40

+0

@stema,你确定喜欢编辑。;-) – Qtax 2012-04-03 11:30:17

+0

肯定overdid =) – 2012-04-03 11:49:50

0

请使用这个表达式:

(?<first>\w+)\s(?<second>\w+)(?<third>\(\d+\))=(?<forth>.*)