1

我有一些行文本。我想从本文中创建事件和意图活动,将它们放在列表中,然后将它们导入数据库。让我更具体一点。假设我有以下句子:“<strong>在Party1 我们会喝点酒,吃非常好的食物,玩ps3 游戏。在Party2 上,我们会唱卡拉OK 并伴着嘻哈歌曲跳舞。”</p>

我希望的输出是:

活动一:Party1

Activitie1: take some drinks
Activitie2: eat very good food
Activitie3: play ps3 games

事件2:派对2

Activitie1: do karaoke
Activitie2: dance with hip hop songs

到目前为止,我所做的是允许特殊字符“#,*”。所以当我有 * 我产生一个事件,当我有 # 我产生一个活动。结果,我可以产生事件和活动,但我无法匹配它们。我需要找到一种方法来匹配(意图)生成的元素。我的代码:

string astring = Convert.ToString(lblrowtext.Text);          
if (astring.IndexOf("#") >= 0 || astring.IndexOf("*") >= 0)          
{               
  string[] Eventsarray;            
  string[] Activitiessarray;            
  List<string> listofEvents = new List<string>();            
  List<string> listofActivities = new List<string>();            
  Activitiessarray = Regex.Matches(astring, @"#([^\*#]*)").Cast<Match>()
                          .Select(m => m.Groups[1].Value).ToArray();   
  Eventsarray = Regex.Matches(astring, @"\*([^\*#]*)").Cast<Match>()
                     .Select(m => m.Groups[1].Value).ToArray();             
  if (Activitiessarray != null)            
  {                
     if (Activitiessarray.Count() > 0)             
     {
        listofActivities = new List<string>(Activitiessarray);
        ViewState["listofActivities"] = listofActivities;
        Repeater1.DataSource = listofActivities;
        Repeater1.DataBind();
     }

     if (Eventsarray != null)
     {
        if (Eventsarray.Count() > 0)
        {
           listofEvents = new List<string>(Eventsarray);
           ViewState["listofEvents"] = listofEvents;
           Repeater2.DataSource = listofEvents;
           Repeater2.DataBind();
        }
     }
  }
}
4

2 回答 2

1

您可以像下面这样实现:

  private static void Main(string[] args)
    {
        var updationIndex = 0;
        const string inputString = "On *Party1 #we will take some drinks, #eat very good food and #play ps3 games.# ";
        Func<string, char, char, string> getMyString = (givenString, skipTill, takeTill) =>
            {
                var opString =
                    new string(
                        givenString.ToCharArray()
                                   .SkipWhile(x => x != skipTill)
                                   .Skip(1)
                                   .TakeWhile(x => x != takeTill)
                                   .ToArray());

                updationIndex = inputString.IndexOf(givenString, StringComparison.CurrentCultureIgnoreCase)
                                + opString.Length;

                return opString;
            };

        var eventName = getMyString(inputString, '*', '#');
        Console.WriteLine("Event" + eventName);
        Console.WriteLine("Activities: ");
        while (updationIndex < inputString.Length)
        {
           var activity = getMyString(inputString.Remove(0, updationIndex), '#', '#');
           Console.WriteLine(activity);
           if (string.IsNullOrWhiteSpace(activity))
           {
               break;
           }

        }

}
于 2013-08-13T08:40:38.567 回答
0

创建一个要添加活动的事件类。每次遇到*时,创建一个新的 Event 实例。

伪 C#:

class Event 
{
    string Description;
    List<Activity> Activities;
}

class Activity
{
    string Description;
}

List<Event> ParseEventLines(IEnumerable<string> allLines)
{
    var result = new List<Event>();

    Event currentEvent = null;

    foreach (var line in allLines)
    {
        if (line.StartsWith("*"))
        {
            currentEvent = new Event { Description = line };
            result.Add(currentEvent);
        }
        else if (line.StartsWith("#"))
        {
            currentEvent.Activities.Add(new Activity { Description = line });
        }
    }

    return result;
}
于 2013-08-13T06:18:28.453 回答