求助大牛帮助写一个正则表达式

jzbigsea 2015-07-23 11:58:55
例如:

A手机价格在1200元时我去买一台 ,卖1500元。B手机我想买一台价格要是1800元,2500卖出。

如何以下图的方案

正确识别提取出:
A手机 买=1200 卖=1500
B手机 买=1800 卖=2500

特定条件:
1、案例中是“句号”将两段号分开了(不排除有用分号或其它固定字符的可能),
2、将 “买” “卖” “A手机、B手机” 数字”作为需要匹配的固定字符,用四种颜色代表四类属性。
3、实际应用,只能确定固定的属性,并不能确定属性与属性的离距及顺序。
4、可能性太多,我只想用示图上的三种方案来匹配。写三条正则也行,写一条正则也行。

我对正则一窍不通,还请大牛哥不吝赐教。
...全文
99 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2015-07-23
  • 打赏
  • 举报
回复
([A-Z]手机).*?(\d+|买|卖).*?(\d+|买|卖).*?(\d+|买|卖).*?(\d+|买|卖) 正则只能负责析出成员,语义分析得你自己编程
jzbigsea 2015-07-23
  • 打赏
  • 举报
回复
楼上的大哥,我知道可能性太多,我只想用示图上的三种方案来匹配。写三条正则也行,写一条正则也行。写n条也行。语议那玩意就更不懂怎么弄了。
  • 打赏
  • 举报
回复
你将正则当做语义解析了!这不是正则能做的事情,给你举个下面的例子
A手机价格在我有1200元时卖1500元,我买不起
  • 打赏
  • 举报
回复
两个money那段的\d+改成 \d+(\.\d+)?
jzbigsea 2015-07-23
  • 打赏
  • 举报
回复
楼上的大牛,你就是亲人么,不过只能取出整数。如果有小数怎么取法?
  • 打赏
  • 举报
回复
string txt = @"A手机价格在1200元时我去买一台 ,卖1500元。B手机我想买一台价格要是1800元,2500卖出。c手机卖100,买90,200买D手机,卖300";
string patten = @"(?=.*?(?<m>\p{L})手机)(?=.*?(?<b1>买|卖).*?(?<b2>买|卖)).*?(?<money1>\d+).*?(?<money2>\d+).*?(?:[,。]|$)";
foreach (Match m in Regex.Matches(txt, patten))
{
    Console.WriteLine(string.Format("{0}手机 {1} {2} {3} {4}", m.Groups["m"].Value, m.Groups["b1"].Value, m.Groups["money1"].Value, m.Groups["b2"].Value, m.Groups["money2"].Value));
}
A\B\C\D都能匹配到

110,538

社区成员

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

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

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