我的asp页面中有一个TemplateField,它绑定了一个名为Descript的字符串数据类型的列,它存储了一个帮助台票据的注释条目,并附加了字符串开头的最新注释。
<asp:TemplateField HeaderText="Notes" SortExpression="DESCRIPT">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("DESCRIPT") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("DESCRIPT") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
在此Descript字符串中,可能会出现几个日期和时间,后跟一个时区,一个连字符,一个名称,然后是一些文本。
例如:
12/4/2015 8:34 AM中央标准时间 - 最后一个
我想要做的是在每次出现相同模式的情况时,在此信息之前插入一个新行(或2),以便在每个新条目出现时给出一些视觉中断。
我的猜测是我需要使用RegEx来匹配日期/时间模式并存储在变量中,然后用新的行+变量替换该信息。
类似的东西:
string text = Descript.ToString();
string pattern = @"/[0-1]\d\/[0-3]\d\/\d{4} [0-1]\d:[0-5]\d [aApP][mM]/";
Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
Match m = r.Match(text);
while (m.Success)
{
//here is where I am stuck
//I expect to have something like Replace (found string) with Environment.NewLine + (found string)
}
如果我可以修改我的SQL select语句,我非常乐意这样做。
Select ID, Name, Descript
From Table
此SQL语句可能返回超过100条记录,并且每条Descript记录中的日期时间模式可能会多次出现。
感谢任何帮助!
答案 0 :(得分:1)
您需要使用&#34;反向引用。&#34;这些描述如下:https://msdn.microsoft.com/en-us/library/ms972966.aspx(搜索&#34;反向引用&#34;)
在你的例子中:
newText = Regex.Replace(text, pattern, "\n\1")
(请注意,某些正则表达式实现将整个匹配视为\0
)
反向引用,在这种情况下\1,
代表找到的原始字符串,在您的情况下,它是时间和日期。实际上,这就是说,取出所发现的任何东西,并用换行符替换它,然后找到所有找到的东西。