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

标签 c# regex regex-lookarounds

(在 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+)\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

关于c# - 使用可选值改进正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33306731/

相关文章:

c# - Xamarin.Android : The call is ambiguous between the following methods or properties

c# - 编写报告进度的方法

c# - 我怎样才能让一个事件处理程序从一个单独的线程而不是它创建的线程中调用?

c# - 我的 IF 逻辑有什么问题?

regex - 正则表达式,字符串中任意位置的负前瞻

javascript - 尝试匹配 JavaScript 字符串上的所有正则表达式

regex - 正则表达式,匹配 "UnQualified"个字符串

ruby 正则表达式删除额外\n

javascript - 用于替换中间字母的正则表达式

regex - 如何排除正则表达式字符串中间的字符串?