我有一个看起来像这样的字符串:
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
答案 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