字符串替换数据库的值

时间:2013-01-17 07:28:24

标签: c# regex string

使用 C#4.0 vs10 ASP .Net MVC 4.0

以下是一个示例字符串:

string x = "herr <FirstName> <LastName> , \n With due respect and humble submission, I , the student of <Semester>,<Year> of <DepartmentName> of <UniversityName>."

我有一个包含数百万行的数据库,它有不同的(这些)信息。

我必须检查字符串。其中“&lt;&gt;”对于每行数据表,找到“&lt;&gt;”内的字段的标签标签将被替换。我不明白我在说什么。请让我举个例子:

对于每行数据表,当找到字符串时,将在此处替换当前DataRow中的FirstName。喜欢:

foreach(DataRow drow in dt.Rows)
{
    string body = "herr " + drow["FirstName"] + " " + drow["LastName"] + ", \n With due respect and humble submission, I , the student of " + drow["Semester"] + "," + drow["Year"] + " of " + drow["DepartmentName"] + " of " + drow["UniversityName"] + ".";

sendmail(body);
}

我对RegularExpression一无所知。这样做的任何简单,容易和明智的方法?

2 个答案:

答案 0 :(得分:2)

一个简单的解决方案是使用Replace方法:

string x = "herr <FirstName> <LastName> , \n With due respect and humble submission, I , the student of <Semester>,<Year> of <DepartmentName> of <UniversityName>."




foreach(DataRow drow in dt.Rows)
{
   string body = x.Replace("<FirstName>", drow["FirstName"]).
                Replace("<LastName>", drow["LastName"]).
                Replace("<Semester>", drow["Semester"]).
                Replace("<Year>", drow["Year"]).
                Replace("<DepartmentName>", drow["DepartmentName"]).
                Replace("<UniversityName>", drow["UniversityName"]);

    sendmail(body);
}

修改

如果“&lt;&gt;”之间的内容,您可以使用以下扩展方法标签不是预先确定的。

public static class StringExtensions
{
    public static string ReplaceString(this string s, string newString)
    {
        int startIndex = s.IndexOf("<");

        s = s.Insert(startIndex, newString);

        startIndex = s.IndexOf("<"); //redetermine the startIndex in a new string generated above
        int length = s.IndexOf(">") - startIndex + 1;

        return s.Remove(startIndex, length);
    }
}

该方法只搜索第一个“&lt;”和第一个“&gt;”并替换标签和内容。您可以通过以下方式使用它:

string body = x.ReplaceString(drow["value for dynamicly defined tag"]).
  ReplaceString(drow["value for dynamicly defined tag 2"])

依旧......

注意:

我可以使用替换方法而不是先插入新值,而不是删除上面示例中的标记,但由于标记内的内容可能依赖于用户输入,因此两个标记可能具有相同的内容和在这种情况下,替换方法会造成麻烦。

答案 1 :(得分:0)

string.Format是你的朋友,我想。

一个例子:

string x = string.Format("herr {0} {1} , \n With due respect and humble submission, I , the student of {2},{3} of {4} of {5}.", drow["FirstName"], drow["LastName"], drow["Semester"], drow["Year"], drow["DepartmentName"], drow["UniversityName"]);