姓名:张三,单据编号:123456789,摘要:测测测(10.1-10.31),测测#,金额:110,01..……等等
怎么把冒号前面的截取出来,然后把冒号后面的的截取出来
Dictionary<string, string> dic = str.Split(',').GroupBy(x => x.Split(':')[0], x => x.Split(':')[1]).ToDictionary(x => x.Key, x => x.First());
感谢回答,无法解决 冒号后多个逗号的问题哪
@越努力越幸运啊:
Dictionary<string, string> dic = new Dictionary<string, string>();
string str = "姓名:张三,单据编号:123456789,摘要:测测测(10.1-10.31),测测#,金额:110,01";
str = "," + str + ",";
string[] arr = str.Split(':');
for (int i = 0; i < arr.Length - 1; i++)
{
string key = arr[i].Substring(arr[i].LastIndexOf(',') + 1);
string value = arr[i+1].Substring(0, arr[i + 1].LastIndexOf(','));
dic.Add(key, value);
}
@TenFly: 很感谢分享,这是发的字符串当中最好的一种解决方法 ,非常感谢 我后来才发现,我的问题是一个无法预知的字符串,其实是无法解决的 例如:
姓名:李一, 编号:003, 摘要:测试,测试地点有:1.这里,2.那里 XXXXXXXXXXX, 金额:税前:120.00 ,税后:156333XXXXXXXXXXX
因为无法预知里面的字符
namespace ConsoleApp1
{
internal class Program
{
internal static readonly char[] separator = new char[] {',',','};
internal static readonly char[] separator2 = new char[] { ':', ':' };
static void Main(string[] args)
{
var list = new List<ItemDto>();
var lines = File.ReadLines("C:/测试.txt");
foreach (var line in lines)
{
var itemModel = line.Split(separator,StringSplitOptions.RemoveEmptyEntries).ToList();
if (itemModel != null && itemModel.Count > 3)
{
foreach (var item in itemModel)
{
var tmpItem = new ItemDto();
var text = item.Split(separator2, StringSplitOptions.RemoveEmptyEntries).ToList();
if (text!=null && text.Count == 2)
{
if (text[0].Contains("姓名"))
tmpItem.姓名 = text[1];
if (text[0].Contains("单据编号"))
tmpItem.单据编号 = text[1];
if (text[0].Contains("摘要"))
tmpItem.摘要 = text[1];
if (text[0].Contains("金额") && decimal.TryParse(text[1],out var number))
tmpItem.金额 = number;
}
list.Add(tmpItem);
}
}
}
Console.WriteLine("读取完毕");
Console.ReadKey();
}
}
public class ItemDto
{
public string 姓名 { get; set; }
public string 单据编号 { get; set; }
public string 摘要 { get; set; }
public decimal 金额 { get; set; }
}
}
感谢回答,这个好像无法解决 冒号后多个逗号的问题
@越努力越幸运啊: 先有正则将数据格式中的","去掉就行了
@越努力越幸运啊: Regex.Replace(line, @"\d+,?\d*(\.\d+)?", "");
@LDMING: "姓名:小明,单据编号:123456789,987654321,110,112,摘要:测测测(10.1-10.31),测测#,金额:110,01,测测:"
使用后:姓名:小明,单据编号:,,,,摘要:测测测(-),测测#,金额:,测测:
先按照","Split一下,得到一个A:B的数组。
然后对数组个每个元素,按照":"Split,[0]是title,[1]是value。如果Split后的长度是1,那就不是这种结构,另外处理。
感谢回答,就是不知道怎么另外处理 哈哈
也可以考虑使用正则表达式拆分字符串
感谢回答,我不会 噗哈哈
string input = "姓名:张三,单据编号:123456789,摘要:测测测(10.1-10.31),测测#,金额:110,01"; string[] parts = input.Split(':'); //这里分割的是冒号 for (int i = 0; i < parts.Length - 1; i+=2) { string key = parts[i]; // 冒号前面的部分 string value = parts[i+1].Split(',')[0]; // 冒号后面的部分,如果冒号后面还有逗号,还需要进一步分割 Console.WriteLine("Key: " + key + ", Value: " + value); }
感谢回答,不可以有多少个逗号就写多少个分割代码呐
var jdbt = "姓名:小明,单据编号:123456789,987654321,110,112,摘要:测测测(10.1-10.31),测测#,金额:110,01,测测:";
Dictionary<int, Dictionary<string, string>> pairs = new Dictionary<int, Dictionary<string, string>>();
string list = "";
string[] vv = jdbt.Split(',');
int shu = 0;
for (int i = 0; i < vv.Length; i++)
{
Dictionary<string, string> li = new Dictionary<string, string>();
if (vv[i].Split(':').Count() != 2)
{
string a = pairs[shu].Keys.Select(t => t).FirstOrDefault().ToString();
string b = pairs[shu].Values.Select(t => t).FirstOrDefault().ToString();
li.Add(a, b + "," + vv[i].Split(':')[0]);
pairs[shu] = li;
}
else
{
shu = shu + 1;
li.Add(vv[i].Split(':')[0].ToString(), vv[i].Split(':')[1].ToString());
pairs.Add(shu, li);
}
}
foreach (var item in pairs)
{
Dictionary<string, string> result = new Dictionary<string, string>();
string a = item.Value.Keys.Select(t => t).FirstOrDefault().ToString();
string b = item.Value.Values.Select(t => t).FirstOrDefault().ToString();
}
虽然已经解决了,我还是来贴个
string input = "姓名:小明,单据编号:123456789,987654321,110,112,摘要:测测测(10.1-10.31),测测#,金额:110,01,测测:";
input = input.EndsWith(",") ? input : (input + ",");
string pattern = @"([^,]+):([^:]+)?,";
MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
{
string key = match.Groups[1].Value.Trim();
string value = match.Groups[2].Value.Trim();
Console.WriteLine($"{key}-{value}");
}
已经解决了 感谢,有什么更好的办法 希望不吝赐教,非常感谢
– 越努力越幸运啊 1年前