RegEx在管道之间获取第二和第三个变量

时间:2012-10-25 17:05:11

标签: .net regex

enter image description here 示例文字

  

工程| AB7407 | 007412665 |杰基布朗|画画   构造

我需要2个RegEx。在第一根管子AB7407之后,我可以给我第二个值 第二个管道007412665后,第二个Redex可以给我第三个值

我试过了,但它给了我示例文本:

^(?<field1>[^|]+),(?<field2>[^|]+),(?<field3>[^|]+),(?<field4>[^|]+),(?<field5>[^|]+)$

结果:

  

工程| AB7407 | 007412665 |杰基布朗|画画   构造

任何人都可以建议我的正则表达式发生了什么。

4 个答案:

答案 0 :(得分:4)

我会这样做:

 string original = "Engineering | AB7407 | 007412665 | Jackie Browne | Drawing for Construction";
 string[] split = original.Split('|');
 string firstcode = split[1];
 string secondcode = split[2];

如果要删除所有前导/尾随空格:

string secondcode = split[2].Trim();

答案 1 :(得分:2)

Dim x = "Engineering | AB7407 | 007412665 | Jackie Browne | Drawing for Construction"
Dim parts = x.Split(" | ")

parts(1)现在包含第二个字符串块,parts(2)包含第三个字符串。这是VB,但c#或你正在使用的方法类似。

修复你的正则表达式:

^(?<field1>[^|]+) \| (?<field2>[^|]+) \| (?<field3>[^|]+) \| (?<field4>[^|]+) \| (?<field5>[^|]+)$

如果你必须有2个正则表达式,

(?<=^[^|]+ \| )[^|]+

匹配第二个块,

(?<=^(?:[^|]+ \| ){2})[^|]+

匹配第3名。

答案 2 :(得分:0)

正则表达式是处理它的错误方法。命令行上的cut -f 2,3 -d '|'将提供您正在寻找的内容。

任何编程语言都应该有一个字符串拆分函数,它会根据你的管道分隔符将你的字符串变成一个字符串数组。使用它而不是正则表达式。

答案 3 :(得分:0)

使用群组

^(?<field1>.*?)\|(?<field2>.*?)\|(?<field3>.*?)\|(?<field4>.*?)\|(?<field5>.*?)$

名为field2field3的群组包含您的数据