使用可选值改进正则表达式

时间:2015-10-23 15:57:29

标签: c# regex regex-lookarounds

(在C#中使用Regex)

我有几个常规表达式来解析几个字段中的一行。其中一个字段有一个可选的字符,我无法弄清楚如何使我的正则表达式将其拆分。我尝试在一行中改进它,但我不能这样做。

我的意见:

4-002 TERMO CONTINENTAL 1 L N°3995 9.22 4-003 TERMO CONTINENTAL 2 N°3996 99.22

我渴望的输出:

Item[0].Code = 4-002
Item[0].Detail = TERMO CONTINENTAL 1 L N°3995
Item[0].Price = 9.22

Item[1].Code = 4-003
Item[1].Detail = TERMO CONTINENTAL 2 N°3996
Item[1].Price = 99.22

我的最后一次尝试:

分开两个项目:(?=\d\-\d\d\d\s.*)
这不起作用,因为有些代码是:例如14-001而不是4-001
我尝试过:([\d]\d\-\d\d\d\s.*)但是没有效果

问题: 我怎样才能找到两种可能性? 14-0014-001

而在其他方面与这个问题有关:
要将详细信息与价格分开:([^\s]*$)(来自之前拆分的一个项目)
要将代码与详细信息分开:(\d\-\d\d\d\s)(与原始问题相同的问题)

对这个正则表达式的任何帮助都会有所帮助并且有用。

提前致谢!

2 个答案:

答案 0 :(得分:2)

我相信以下正则表达式可以安全使用:

(\d+-\d+)\s+(.*?N°\d+)\s+(\d+\.\d+)

请参阅regex demo

如果Item.Detail可以包含任何文字且位于digits - digits和浮点值之间,请使用

(\d+-\d+)\s+(.*?)\s+(\d+\.\d+)

请参阅another demo

结果:

enter image description here

请参阅IDEONE demo

答案 1 :(得分:1)

尝试

(\d+-\d\d\d)(.*?)(\d+\.\d\d)

+适用于一次或多次。