日期:2014-05-18  浏览次数:20833 次

根据天气预报文字描述添加对应气象图片
气象站提供一段文字信息(当地气象)
现在要根据这段文字添加配套的气象图片


其中文字描述里基本都会出现“XX今天XX(例如晴)明天XX”两个关键词,有时候出现的是“今天和明天XX(例如晴)”。
只需要配今天的天气图片就可以了

请问思路如何解决?
不胜感激!

------解决方案--------------------
楼主也是气象部门的?气象部门有数据报文形式的天气预报,为什么不使用?
------解决方案--------------------
up
------解决方案--------------------
为什么不让他输入文字的时候选择一个图片存数据库呢?
------解决方案--------------------
学习

string.find
------解决方案--------------------
up
------解决方案--------------------
这是我根据你所给的例子写的正则

string yourStr = ..............;
MatchCollection mc = Regex.Matches(yourStr, @ "今天((?> 今天(? <NESTEDTD> )|明天(? <NESTEDTO> )|[\u4e00-\u9fa5,;])*)(?(NESTEDTD)(?!))(?(NESTEDTO)(?!))明天[\u4e00-\u9fa5,;]+。 ", RegexOptions.IgnoreCase | RegexOptions.Singleline);
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "\n ";
}

取出结果为
今天和明天多云,局部有阵雨。
今天多云,明天多云转阴。
今天晴到多云,午后到上半夜局部有阵雨或雷雨;明天多云。


这时因为可以保证“今天”和“明天”是唯一的,可以用我二楼所说的方法进行分析了,当然如果说“今天”和“明天”分开时各取一个,而“今天和明天”这种情况只取一个的话,可以这样做,算了,都写了吧,这是处理单条数据的


string yourStr = .................;
Match m = Regex.Match(yourStr, @ "今天((?> 今天(? <NESTEDTD> )|明天(? <NESTEDTO> )|[\u4e00-\u9fa5,;])*)(?(NESTEDTD)(?!))(?(NESTEDTO)(?!))明天[\u4e00-\u9fa5,;]+。 ", RegexOptions.IgnoreCase | RegexOptions.Singleline);
Regex reg = new Regex( "(晴到多云|多云转阴|多云|晴|阴|阵雨|雷雨) ");
if (m.Success)
{
if (m.Value.IndexOf( "今天和明天 ") > -1)
{
Match ma = reg.Match(m.Value);
if (ma.Success)
{
MessageBox.Show(ma.Value); //这里根据取得的关键字做显示图片处理,此处只有一个
}
}
else
{
string[] temp = m.Value.Split(new string[] { "明天 " }, StringSplitOptions.RemoveEmptyEntries);
Match ma = reg.Match(temp[0]);
if (ma.Success)
{
MessageBox.Show(ma.Value); //这是今天的
}
ma = reg.Match(temp[1]);
if (ma.Success)
{
MessageBox.Show(ma.Value); //这是明天的
}
}
}


如果需要同时处理多条数据的,说明一下,我下写一下
------解决方案--------------------
Regex reg = new Regex( "(晴到多云|多云转阴|多云|晴|阴|阵雨|雷雨) ");

这里的正则,你可以根据可能存在的天气关键字和图片自己添加,格式为
(1|2|3|4|5)
但要注意一点,如果关键字中可能出现包含关系时,左侧的不能被右侧包含,比如“多云转阴”和“多云”,那么“多云转阴”在左侧,而“多云”在右侧,否则匹配出的结果就是错的