C#如果按照要求提取字符串中指定的数据项

bright1219 2016-05-31 12:30:55
字符串如下:
店铺 : *****商铺*******
交易时间 : 2016-05-28 16:47:25
营业员 : 收银员 : 张三
交易方式 : 销售 单据号 : 6U4452800015
顾客卡号 : 2100*****9156
手机号码 : 186****6500
统参考号 : 000628550564
---------------------购物明细--------------------
商品 数量 方式 单价 折扣 金额
16214503133311 1 1 658 100% 658.00
---------------------支付方式--------------------
总计 : 1 总金额 : 658.00
信用卡:658
店铺 : *****商铺*******
交易时间 : 2016-05-28 16:47:25
营业员 : 收银员 : 张三
交易方式 : 销售 单据号 : 6U4452800016
顾客卡号 : 2100*****9156
手机号码 : 186****6500
系统参考号 : 000628550564
---------------------购物明细--------------------
商品 数量 方式 单价 折扣 金额
216214503133311 1 1 429 100% 429.00
---------------------支付方式--------------------
总计 : 1 总金额 : 429.00
信用卡:429
店铺 : *****商铺*******
交易时间 : 2016-05-28 16:47:25
营业员 : 收银员 : 张三
交易方式 : 销售 单据号 : 6U4452800017
顾客卡号 : 2100*****9156
手机号码 : 186****6500
系统参考号 : 000628550564
---------------------购物明细--------------------
商品 数量 方式 单价 折扣 金额
216214503133311 1 1 958 100% 958.00
---------------------支付方式--------------------
总计 : 1 总金额 : 958.00
信用卡:958




需要将如上的字符串中,提取【单据号 :】后面的12位字符,同时需要提取【总金额 :】后面的金额项,要将上面的字符串转换成如下的三条记录:
6U4452800015 658.00
6U4452800016 429.00
6U4452800017 958.00
C#应该怎么实现呀。谢谢啦!
...全文
303 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
XBodhi. 2019-07-31
  • 打赏
  • 举报
回复
上面是 3#写的,
XBodhi. 2019-07-31
  • 打赏
  • 举报
回复
using System;
using System.Text.RegularExpressions;

namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
string txt = @"楼主 发表于: 2016-05-31 12:30:55
字符串截取 字符串如下:
店铺 : *****商铺*******
交易时间 : 2016-05-28 16:47:25
营业员 : 收银员 : 张三
交易方式 : 销售 单据号 : 6U4452800015
顾客卡号 : 2100*****9156
手机号码 : 186****6500
统参考号 : 000628550564
---------------------购物明细--------------------
商品 数量 方式 单价 折扣 金额
16214503133311 1 1 658 100% 658.00
---------------------支付方式--------------------
总计 : 1 总金额 : 658.00
信用卡:658
店铺 : *****商铺*******
交易时间 : 2016-05-28 16:47:25
营业员 : 收银员 : 张三
交易方式 : 销售 单据号 : 6U4452800016
顾客卡号 : 2100*****9156
手机号码 : 186****6500
系统参考号 : 000628550564
---------------------购物明细--------------------
商品 数量 方式 单价 折扣 金额
216214503133311 1 1 429 100% 429.00
---------------------支付方式--------------------
总计 : 1 总金额 : 429.00
信用卡:429
店铺 : *****商铺*******
交易时间 : 2016-05-28 16:47:25
营业员 : 收银员 : 张三
交易方式 : 销售 单据号 : 6U4452800017
顾客卡号 : 2100*****9156
手机号码 : 186****6500
系统参考号 : 000628550564
---------------------购物明细--------------------
商品 数量 方式 单价 折扣 金额
216214503133311 1 1 958 100% 958.00
---------------------支付方式--------------------
总计 : 1 总金额 : 958.00
信用卡:958";
string pattern = @"(?<=单据号\s*:\s*)([^\n\r]*)[\s\S]*?总金额\s*:\s*([^\n\r]*)";
foreach (Match match in Regex.Matches(txt, pattern))
{
Console.WriteLine("单据号:{0}\t总金额:{1}", match.Groups[1].Value, match.Groups[2].Value);
}
}
}
}
朱帝11 2019-07-31
  • 打赏
  • 举报
回复
string text = @"店铺 : *****商铺******* 交易时间: 2016 - 05 - 28 16:47:25 营业员: 收银员: 张三 交易方式 : 销售 单据号 : 6U4452800015 顾客卡号: 2100 * ****9156 手机号码: 186 * ***6500 统参考号: 000628550564 -------------------- - 购物明细-------------------- 商品 数量 方式 单价 折扣 金额 16214503133311 1 1 658 100 % 658.00 -------------------- - 支付方式-------------------- 总计: 1 总金额: 658.00 信用卡: 658 店铺: *****商铺 * ****** 交易时间 : 2016 - 05 - 28 16:47:25 营业员: 收银员: 张三 交易方式 : 销售 单据号 : 6U4452800016 顾客卡号: 2100 * ****9156 手机号码: 186 * ***6500 系统参考号: 000628550564 -------------------- - 购物明细-------------------- 商品 数量 方式 单价 折扣 金额 216214503133311 1 1 429 100 % 429.00 -------------------- - 支付方式-------------------- 总计: 1 总金额: 429.00 信用卡: 429 店铺: *****商铺 * ****** 交易时间 : 2016 - 05 - 28 16:47:25 营业员: 收银员: 张三 交易方式 : 销售 单据号 : 6U4452800017 顾客卡号: 2100 * ****9156 手机号码: 186 * ***6500 系统参考号: 000628550564 -------------------- - 购物明细-------------------- 商品 数量 方式 单价 折扣 金额 216214503133311 1 1 958 100 % 958.00 -------------------- - 支付方式-------------------- 总计: 1 总金额: 958.00 信用卡: 958"; string oddNumber = ""; string money = ""; using (StringReader sr = new StringReader(text)) { string line; while ((line = sr.ReadLine()) != null) { if (line.IndexOf("单据号") !=-1) { Match match = Regex.Match(line, @"(\d|[a-zA-Z])+"); oddNumber = match.Value; } if (line.IndexOf("总金额") != -1) { Match match = Regex.Match(line, @"(\d+(\.\d+))"); money = match.Value; } if (!string.IsNullOrEmpty(oddNumber)&& !string.IsNullOrEmpty(money)) { Console.WriteLine("{0} {1}", oddNumber, money); oddNumber = money=""; } } }
小白xqr 2019-07-31
  • 打赏
  • 举报
回复
m.Groups[1].Value, m.Groups[2].Value);
如何继续提取groups里的值?比如说我要用这个组里的第二个值?
  • 打赏
  • 举报
回复
string txt = @"楼主 发表于: 2016-05-31 12:30:55
字符串截取 字符串如下:
店铺 : *****商铺*******
交易时间 : 2016-05-28 16:47:25
营业员 : 收银员 : 张三
交易方式 : 销售 单据号 : 6U4452800015
顾客卡号 : 2100*****9156
手机号码 : 186****6500
统参考号 : 000628550564
---------------------购物明细--------------------
商品 数量 方式 单价 折扣 金额
16214503133311 1 1 658 100% 658.00
---------------------支付方式--------------------
总计 : 1 总金额 : 658.00
信用卡:658
店铺 : *****商铺*******
交易时间 : 2016-05-28 16:47:25
营业员 : 收银员 : 张三
交易方式 : 销售 单据号 : 6U4452800016
顾客卡号 : 2100*****9156
手机号码 : 186****6500
系统参考号 : 000628550564
---------------------购物明细--------------------
商品 数量 方式 单价 折扣 金额
216214503133311 1 1 429 100% 429.00
---------------------支付方式--------------------
总计 : 1 总金额 : 429.00
信用卡:429
店铺 : *****商铺*******
交易时间 : 2016-05-28 16:47:25
营业员 : 收银员 : 张三
交易方式 : 销售 单据号 : 6U4452800017
顾客卡号 : 2100*****9156
手机号码 : 186****6500
系统参考号 : 000628550564
---------------------购物明细--------------------
商品 数量 方式 单价 折扣 金额
216214503133311 1 1 958 100% 958.00
---------------------支付方式--------------------
总计 : 1 总金额 : 958.00
信用卡:958";
            string pattern = @"(?<=单据号\s*:\s*)([^\n\r]*)[\s\S]*?总金额\s*:\s*([^\n\r]*)";
            foreach (Match m in Regex.Matches(txt, pattern))
            {
                Console.WriteLine("单据号:{0} 总金额:{1}", m.Groups[1].Value, m.Groups[2].Value);
            }
EdsionWang 2016-05-31
  • 打赏
  • 举报
回复

 string test = @"店铺 : *****商铺*******
                            交易时间 : 2016-05-28 16:47:25
                            营业员 : 收银员 : 张三
                            交易方式 : 销售 单据号 : 6U4452800015
                            顾客卡号 : 2100*****9156
                            手机号码 : 186****6500
                            统参考号 : 000628550564
                            ---------------------购物明细--------------------
                            商品 数量 方式 单价 折扣 金额
                            16214503133311 1 1 658 100% 658.00
                            ---------------------支付方式--------------------
                            总计 : 1 总金额 : 658.00
                            信用卡:658
                            店铺 : *****商铺*******
                            交易时间 : 2016-05-28 16:47:25
                            营业员 : 收银员 : 张三
                            交易方式 : 销售 单据号 : 6U4452800016
                            顾客卡号 : 2100*****9156
                            手机号码 : 186****6500
                            系统参考号 : 000628550564
                            ---------------------购物明细--------------------
                            商品 数量 方式 单价 折扣 金额
                            216214503133311 1 1 429 100% 429.00
                            ---------------------支付方式--------------------
                            总计 : 1 总金额 : 429.00
                            信用卡:429
                            店铺 : *****商铺*******
                            交易时间 : 2016-05-28 16:47:25
                            营业员 : 收银员 : 张三
                            交易方式 : 销售 单据号 : 6U4452800017
                            顾客卡号 : 2100*****9156
                            手机号码 : 186****6500
                            系统参考号 : 000628550564
                            ---------------------购物明细--------------------
                            商品 数量 方式 单价 折扣 金额
                            216214503133311 1 1 958 100% 958.00
                            ---------------------支付方式--------------------
                            总计 : 1 总金额 : 958.00
                            信用卡:958";
            Regex regOrder = new Regex("单据号 : (.+)");
            MatchCollection matchOrder = regOrder.Matches(test);
            Regex regMoney = new Regex("总金额 : (.+)");
            MatchCollection matchMoney = regMoney.Matches(test);
            StringBuilder sb = new StringBuilder();
            MessageBox.Show(matchOrder.Count.ToString() + matchMoney.Count.ToString());
            for (int i = 0; i < matchOrder.Count; i++)
            {
                sb.Append(matchOrder[i].Groups[1].Value.TrimEnd());
                sb.Append("  ");
                sb.Append(matchMoney[i].Groups[1].Value);
            }
            this.richTextBox1.Text = sb.ToString();
gcaling2006 2016-05-31
  • 打赏
  • 举报
回复
用c#操作文件,取每一行,再截取

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧