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

Improve Regular Expression with optional values

(在 C# 中使用正则表达式)

我有几个正则表达式来解析多个字段中的一行。其中一个字段有一个可选的字符,我不知道如何让我的正则表达式拆分它。我试图在一行中改进它,但我做不到。

我的输入:

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)(与原始问题相同的问题)

有关此正则表达式的任何帮助都将是有帮助和有价值的。

提前致谢!

尝试

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

+ 出现一次或多次。

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

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

regex demo

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

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

another demo

结果:

IDEONE demo