首页 新闻 会员 周边

C#字符串分割问题

0
悬赏园豆:10 [已解决问题] 解决于 2023-11-24 15:07

姓名:张三,单据编号:123456789,摘要:测测测(10.1-10.31),测测#,金额:110,01..……等等

怎么把冒号前面的截取出来,然后把冒号后面的的截取出来

越努力越幸运啊的主页 越努力越幸运啊 | 初学一级 | 园豆:39
提问于:2023-11-16 18:54

已经解决了 感谢,有什么更好的办法 希望不吝赐教,非常感谢

越努力越幸运啊 5个月前
< >
分享
最佳答案
0

Dictionary<string, string> dic = str.Split(',').GroupBy(x => x.Split(':')[0], x => x.Split(':')[1]).ToDictionary(x => x.Key, x => x.First());

收获园豆:10
TenFly | 初学一级 |园豆:69 | 2023-11-22 11:27

感谢回答,无法解决 冒号后多个逗号的问题哪

越努力越幸运啊 | 园豆:39 (初学一级) | 2023-11-23 17:08

@越努力越幸运啊:
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 | 园豆:69 (初学一级) | 2023-11-23 18:00

@TenFly: 很感谢分享,这是发的字符串当中最好的一种解决方法 ,非常感谢 我后来才发现,我的问题是一个无法预知的字符串,其实是无法解决的 例如:
姓名:李一, 编号:003, 摘要:测试,测试地点有:1.这里,2.那里 XXXXXXXXXXX, 金额:税前:120.00 ,税后:156333XXXXXXXXXXX
因为无法预知里面的字符

越努力越幸运啊 | 园豆:39 (初学一级) | 2023-11-24 15:04
其他回答(6)
0
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; }
    }
}

Adming | 园豆:119 (初学一级) | 2023-11-16 20:29

感谢回答,这个好像无法解决 冒号后多个逗号的问题

支持(0) 反对(0) 越努力越幸运啊 | 园豆:39 (初学一级) | 2023-11-23 17:02

@越努力越幸运啊: 先有正则将数据格式中的","去掉就行了

支持(0) 反对(0) LDMING | 园豆:194 (初学一级) | 2023-11-23 17:05

@越努力越幸运啊: Regex.Replace(line, @"\d+,?\d*(\.\d+)?", "");

支持(0) 反对(0) LDMING | 园豆:194 (初学一级) | 2023-11-23 17:12

@LDMING: "姓名:小明,单据编号:123456789,987654321,110,112,摘要:测测测(10.1-10.31),测测#,金额:110,01,测测:"
使用后:姓名:小明,单据编号:,,,,摘要:测测测(-),测测#,金额:,测测:

支持(0) 反对(0) 越努力越幸运啊 | 园豆:39 (初学一级) | 2023-11-23 17:24
0

先按照","Split一下,得到一个A:B的数组。
然后对数组个每个元素,按照":"Split,[0]是title,[1]是value。如果Split后的长度是1,那就不是这种结构,另外处理。

烟台西炮台 | 园豆:195 (初学一级) | 2023-11-17 16:56

感谢回答,就是不知道怎么另外处理 哈哈

支持(0) 反对(0) 越努力越幸运啊 | 园豆:39 (初学一级) | 2023-11-23 17:09
0

也可以考虑使用正则表达式拆分字符串

生命体验之kevin-Y | 园豆:274 (菜鸟二级) | 2023-11-19 17:59

感谢回答,我不会 噗哈哈

支持(0) 反对(0) 越努力越幸运啊 | 园豆:39 (初学一级) | 2023-11-23 17:09
0
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);
}
AirSend | 园豆:522 (小虾三级) | 2023-11-23 10:21

感谢回答,不可以有多少个逗号就写多少个分割代码呐

支持(0) 反对(0) 越努力越幸运啊 | 园豆:39 (初学一级) | 2023-11-23 17:06
0

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();

        }
越努力越幸运啊 | 园豆:39 (初学一级) | 2023-11-23 16:55
0

虽然已经解决了,我还是来贴个

            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}");
            }
复制粘贴机器人 | 园豆:702 (小虾三级) | 2023-11-24 17:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册