C#模式匹配

时间:2010-02-17 17:38:33

标签: c# string design-patterns pattern-matching

我对c#有点新鲜,我正在寻找字符串匹配模式来执行以下操作,

我有一个像这样的字符串

  

这本书将在一本书上展出   唐宁街11号的接待处   并将由关键医疗保健人员参加

我需要使用startIndex和length,

创建一个span标签来突出显示一些文本片段

例如,

  
      
  1. startIndex = 3,长度= 10
  2.   
  3. startIndex = 8,长度= 8
  4.   

我需要动态创建span标记,并为交叉点创建单独的span标记

在这种情况下,

The < span id= 'span1' color='blue'> book < /span> < span id='intersectionSpan' color= pink > will </ span> < span id '= span2' color = 'yellow' > be showcased </ span>

任何人都遇到过任何设计模式或微笑问题

请咨询

3 个答案:

答案 0 :(得分:1)

我不认为这与desing模式有关,但我会查看你所谓的自定义控件

如你所知,标签控件将呈现为一个跨度,所以开始制作新的控件customlabel,例如从标签控件和creta函数继承它,以接受位置(startindex和length)和颜色(红色,黄色) )

假设我们在控件

中有这个功能
 private string AddSpan(string originalString, int[] location, string color)
    {
        string old = originalString.Substring(location[0], location[1]);
        string newStr = string.Format("<span id= '{0}' color='{1}'>", "idUWant", color);
        originalString = originalString.Replace(old, newStr);
        return originalString ; 
    }

原文是这本书将在唐宁街11号的一个招待会上展出 并将由关键医疗保健人员参加

位置很简单2维数组的整数,第一个是起始索引,第二个是长度,颜色参数是颜色字符串

我认为最好为参数创建数据容器,就像只支持一些属性(如startindex,长度和颜色)以便于阅读和维护

一样。

答案 1 :(得分:0)

好吧,我会从一系列“标签”开始。这些将具有要标记的文本的开头和长度。标签还应该能够判断标签中是否有某个位置。

bool IsInTag(int position)

从那里只是循环通过字符串。在每个位置加上该位置的标签数量。如果它超过最后一个位置,则启动一个新标记,因为新标记与其相交。如果它更小,则从交叉点刚刚结束时结束跨度。保存下一个循环的数字并重复。

应该这样做。你可能想玩它,因为这只是我的头脑。

答案 2 :(得分:0)

您可以使用 IndexOf

此链接可以帮助您: http://msdn.microsoft.com/en-us/library/ms228630%28VS.80%29.aspx

如果你有startIndex和length;您可以简单地使用子字符串来获取要在span标记中注入的字符串。