我需要在C#中用','分割这段代码。
示例字符串:
'DC0''008 _', '23802.76', '23802.76', '23802.76', '通讯,ERC,', '2f17', '3f44c0ba-daf1-44f0-A361 - '
我可以使用string.split(','),但你可以看到'Comm,erc'被
分开COMM
ERC
同样'DC0''008_'应该拆分为
'DC0''008 _'
不是
'DC0'
'008 _'
预期的输出应该是这样的:
'DC0''008_'
'23802.76'
'23802.76'
'23802.76'
'Comm,erc,'
'2f17'
'3f44c0ba-daf1-44f0-A361 - '
答案 0 :(得分:3)
split
可以做到,但正则表达式会更复杂。
您可以使用这个更简单的正则表达式使用Regex.Matches
:
'[^']*'
并获取集合中的所有引用字符串。
<强>代码:强>
MatchCollection matches = Regex.Matches(input, @"'[^']*'");
打印所有匹配的值:
foreach (Match match in Regex.Matches(input, @"'[^']*'"))
Console.WriteLine("Found {0}", match.Value);
将所有匹配的值存储在ArrayList
:
ArrayList list = new ArrayList();
foreach (Match match in Regex.Matches(input, @"'[^']*'")) {
list.add(match.Value);
}
编辑:根据以下评论,如果OP想要在捕获的字符串中使用''
,请使用此外观正则表达式:
'.*?(?<!')'(?!')
(?<!')'(?!')
表示匹配未被其他单引号包围的单引号。
答案 1 :(得分:2)
您可以使用此正则表达式获取逗号和撇号中的所有内容:
(?<=')[^,].*?(?=')
要将其转换为字符串数组,您可以使用以下内容:
var matches = Regex.Matches(strInput, "(?<=')[^,].*?(?=')");
var array = matches.Cast<Match>().Select(x => x.Value).ToArray();
编辑:如果你希望它能够捕获双引号,那么在每种情况下匹配它的正则表达都会变得难以处理。在这一点上,最好只使用Regex.Split
的简单模式:
var matches = Regex.Split(strInput, "^'|'$|','")
.Where(x => !string.IsNullOrEmpty(x))
.ToArray();
答案 2 :(得分:0)
using System;
using System.Linq;
using System.Text.RegularExpressions;
namespace ConsoleApplication15
{
class Program
{
static void Main(string[] args)
{
string str = "'DC0008_','23802.76','23802.76','23802.76','Comm,erc,','2f17','3f44c0ba-daf1-44f0-a361-'";
var matches = Regex.Matches(str, "(?<=')[^,].*?(?=')");
var array = matches.Cast<Match>().Select(x => x.Value).ToArray();
foreach (var item in array)
Console.WriteLine("'" + item + "'");
}
}
}
答案 3 :(得分:0)
最好修改你的字符串然后拆分它,这样你就可以实现你想要的东西,如下面的某些东西
string data = "'DC0008_','23802.76','23802.76','23802.76','Comm,erc,','2f17','3f44c0ba-daf1-44f0-a361-'";
data = Process(data); //process before split i.e for the time being replace outer comma with some thing else like '@'
string[] result = data.Split('@'); // now it will work lolz not confirmed and tested
Process()函数位于
之下private string Process(string input)
{
bool flag = false;
string temp="";
char[] data = input.ToCharArray();
foreach(char ch in data)
{
if(ch == '\'' || ch == '"')
if(flag)
flag=false;
else
flag=true;
if(ch == ',')
{
if(flag) //if it is inside ignore else replace with @
temp+=ch;
else
temp+="@";
}
else
temp+=ch;
}
return temp;
}