(在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-001
和4-001
而在其他方面与这个问题有关:
要将详细信息与价格分开:([^\s]*$)
(来自之前拆分的一个项目)
要将代码与详细信息分开:(\d\-\d\d\d\s)
(与原始问题相同的问题)
对这个正则表达式的任何帮助都会有所帮助并且有用。
提前致谢!
答案 0 :(得分:2)
我相信以下正则表达式可以安全使用:
(\d+-\d+)\s+(.*?N°\d+)\s+(\d+\.\d+)
请参阅regex demo
如果Item.Detail
可以包含任何文字且位于digits
- digits
和浮点值之间,请使用
(\d+-\d+)\s+(.*?)\s+(\d+\.\d+)
请参阅another demo
结果:
请参阅IDEONE demo
答案 1 :(得分:1)
尝试
(\d+-\d\d\d)(.*?)(\d+\.\d\d)
+
适用于一次或多次。