0

在此处输入图像描述示例文本:

工程 | AB7407 | 007412665 | 杰基布朗 | 施工图

我需要 2 个正则表达式。在第一个管道 AB7407 之后可以给我第二个值,第二个 Redex 可以在第二个管道 007412665 之后给我第三个值

我尝试了以下操作,但它给了我示例文本:

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

结果:

工程 | AB7407 | 007412665 | 杰基布朗 | 施工图

谁能建议我的正则表达式发生了什么。

4

4 回答 4

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();
于 2012-10-25T17:11:36.340 回答
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 个。

于 2012-10-25T17:09:49.183 回答
0

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

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

于 2012-10-25T17:09:59.263 回答
0

使用组

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

组命名field2field3包含您的数据

于 2012-10-25T17:18:13.070 回答