用逗号分隔,忽略特定的逗号C#

时间:2018-05-16 11:33:20

标签: c# split comma

我有一个看起来像这样的字符串:

  

NULL VALUE,25,000-30,000,31,000-32,000,33,000-50,000

我如何拆分它以便获得:

  

NULL VALUE或25,000-30,000或31,000-32,000或33,000-50,000

我尝试使用正则表达式进行拆分,但没有运气,它会返回

NULL VALUE
25
000-30
000
31
000-32
000
33
000-50
000

我试过这样Regex.Split(items[1], ",(?=(?:[^']*'[^']*')*[^']*$)"),但它并没有回复我需要的东西。

编者注:摘自评论

如果值为千位值,则不能以逗号分割,否则应以逗号分割 NULL VALUE,25,000-30,000应为NULL VALUE | 25,000 - 30,000

2 个答案:

答案 0 :(得分:0)

这是一个试图像这样解析的噩梦,你可能无法100%无误地获得它。如果可能的话,尝试使用适当的分离字符来获取值。

static void Main(string[] args)
    {
        string x = "NULL VALUE,25,000-30,000,31,000-32,000,33,000-50,000";
        string regexstring = @"([A-Z]{1,} [A-Z]{1,}|\d{1,},\d{3}-\d{1,},\d{3}|\d{1,3}-\d{1,3}|\d{1,},\d{3}-\d{1,3}|\d{1,3}-\d{1,},\d{3})";
        var erg = Regex.Split(x, regexstring);
        foreach (var item in erg)
        {
            Console.WriteLine(item);
        }
    }

它产生:

NULL VALUE
,
25,000-30,000
,
31,000-32,000
,
33,000-50,000

此解决方案至少适用于您的测试值。您必须删除空字符串和逗号,但它会正确解析给定值。

答案 1 :(得分:0)

实际上,你想要的是检测范围,从A到B. A可以是任何数字,从0到X,B可以是从0到X的任何数字。

鉴于此,您将面临以下情况:

df = pd.DataFrame([[a, b, c, d] for ((a, b), (c, d)) in tup])
print(df)

一旦您找到匹配的模式,您就可以提取任何范围。

您可以使用此正则表达式:1-10 1-10,000 1,000-10,000 1,000,000-2,000,000 NULL VALUE 表示:

([A-Z ]+|(?:\d{1,3}(?:,\d{3})*)-(?:\d{1,3}(?:,\d{3})*))

在C#代码中,它给出了:

(
    [A-Z ]+#NULL VALUE
    |#OR
    (?:
       \d{1,3}#A trailling number
              (?:,\d{3})*#Followed or not by a thousand separator and 3 digits
    )
    -#The range separator
    (?:\d{1,3}(?:,\d{3})*)#Same thing here
)

哪个输出:

  

NULL VALUE

     

25,000-30,000

     

31,000-32,000

     

33,000-50,000