Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找给定字符串中所有匹配搜索字符串的索引,然后插入新词_C#_Asp.net - Fatal编程技术网

C# 查找给定字符串中所有匹配搜索字符串的索引,然后插入新词

C# 查找给定字符串中所有匹配搜索字符串的索引,然后插入新词,c#,asp.net,C#,Asp.net,我有一个字符串,例如: 为了减少每天的香烟消费量,德里大学的学生Vineet开始抽更长的香烟。香烟对健康有不良影响 是否必须找到香烟并在其前面插入一个以突出显示 string search = "cigaret"; string lbltxt = Label1.Text; int startIndex = Label1.Text.IndexOf(search,StringComparison.CurrentCultureIgnoreCase); int endIndex = Label1.Te

我有一个字符串,例如:

为了减少每天的香烟消费量,德里大学的学生Vineet开始抽更长的香烟。香烟对健康有不良影响

是否必须找到香烟并在其前面插入一个
以突出显示

string search = "cigaret";
string lbltxt = Label1.Text;

int startIndex = Label1.Text.IndexOf(search,StringComparison.CurrentCultureIgnoreCase);
int endIndex = Label1.Text.IndexOf(search,StringComparison.CurrentCultureIgnoreCase) +  (search.Length);
Label1.Text = Label1.Text.Insert(endIndex, "</span>");
Label1.Text = Label1.Text.Insert(findIndex, "<span style='color: red;'>");
string search=“cigaret”;
字符串lbltxt=Label1.Text;
int startIndex=Label1.Text.IndexOf(搜索、StringComparison.CurrentCultureIgnoreCase);
int endIndex=Label1.Text.IndexOf(search,StringComparison.CurrentCultureIgnoreCase)+(search.Length);
Label1.Text=Label1.Text.Insert(endIndex,“”);
Label1.Text=Label1.Text.Insert(findIndex,“”);
这段代码只找到第一个匹配项,并在原始字符串中只高亮显示一次,而不是三次

如果您真的需要进行“丑陋的替换”(我认为这样添加样式是不好的做法),请使用:

string search=“香烟”;
字符串替换=“香烟”;
string-sense=“为了减少每天的香烟消费量,德里大学的一名学生Vineet开始抽更长的香烟。香烟对健康有不良影响”;
字符串newStr=句子.Replace(搜索,替换);
我会这样做。不确定它将如何影响格式(除非格式是HTML)

StringBuilder final=new StringBuilder();
foreach(在Label1.Text.split(“”)中拆分字符串)
{
if(Regex.Match(split,“[a-zA-Z]+”).Value.Equals(“香烟”,StringComparison.CurrentCultureIgnoreCase))
{
最后。附加(@“);
最终。追加(拆分);
最后。附加(@“);
}
其他的
{
最终。追加(拆分);
}
最后。附加(“”);
}
Label1.Text=final.ToString().Trim();
结果:

In an out of the box way to reduce number of cigarette consumption per day, Vineet, a Delhi University student has started smoking longer <span style='color: red;'>cigarettes.</span> <span style='color: red;'>Cigarettes</span> have a bad influence on health
为了减少每天的香烟消费量,德里大学的学生Vineet开始抽更长的香烟。香烟对健康有不良影响
更新:

对不起,你不必做正则表达式。我发现CultureInfo有一个CompareInfo属性,可以像ignore case Contains()方法一样工作:

static void Main(字符串[]args)
{
string yourstring=@“为了减少每天的香烟消费量,德里大学的一名学生维尼特开始抽更长的香烟。香烟对健康有不良影响”;
StringBuilder final=新的StringBuilder();
CultureInfo culture=CultureInfo.CurrentCulture;
foreach(字符串在字符串中拆分。拆分(“”))
{
if(culture.CompareInfo.IndexOf(拆分,“香烟”,CompareOptions.IgnoreCase)!=-1)
{
最后。附加(@“);
最终。追加(拆分);
最后。附加(@“);
}
其他的
{
最终。追加(拆分);
}
最后。附加(“”);
}
Label1.Text=final.ToString().Trim();
}
结果:

In an out of the box way to reduce number of <span style='color: red;'>cigarette</span> consumption per day, Vineet, a Delhi University student has started smoking longer <span style='color: red;'>cigarettes.</span> <span style='color: red;'>Cigarettes</span> have a bad influence on health
为了减少每天的香烟消费量,德里大学的学生Vineet开始抽更长的香烟。香烟对健康有不良影响


谢谢你的努力。这个解决方案唯一的问题是,它也 突出显示不在搜索字符串中的字母。自从我 有一个索引的解决方案,暂时会去的

显然这就是你想要的:

Label1.Text = Regex.Replace(Label1.Text, @"(cigarette)", @"<span style='color: red;'>$1</span>", RegexOptions.IgnoreCase);
Label1.Text=Regex.Replace(Label1.Text、@“(香烟)”、@“$1”、RegexOptions.IgnoreCase);
输出为:

In an out of the box way to reduce number of <span style='color: red;'>cigarette</span> consumption per day, Vineet, a Delhi University student has started smoking longer <span style='color: red;'>cigarette</span>s. <span style='color: red;'>Cigarette</span>s have a bad influence on health
为了减少每天的香烟消费量,德里大学的学生Vineet开始抽更长的香烟。香烟对健康有不良影响
使用此JQUERY

   $("p").html(function(index, value) {
    return value.replace(/\b(cigarette)\b/g, '<strong class="test">$1</strong>');
});
通过这把小提琴

我认为这将是一种简单而安全的工作方式


你可以对区分大小写的单词使用同样的方法。我想你现在能应付了。。或者需要任何帮助,然后发表评论。

您可以这样替换该词:

string search = "cigaret";
Label1.Text = Label1.Text.Replace(search, "<span style='color: red;'>" + search + "</span>");
string search=“cigaret”;
Label1.Text=Label1.Text.Replace(搜索“+search+”);

您好最后,这里是一个有效的代码,但我相信可能有更好的方法来实现它。如果有人能即兴创作,我将不胜感激

    string msg = Label1.Text;

    string search = "cigarette";
    int searchStringLength  = search.Length;

    string startTag = "<span style='color: red;'>";
    string endTag = "</span>";
    int skip = startTag.Length + endTag.Length;

    int msgindex = 0;


    do
    {
        msgindex = msg.IndexOf(search, msgindex, StringComparison.OrdinalIgnoreCase);
        if (msgindex == -1) break;

        msg= msg.Insert((msgindex + searchStringLength), endTag);
        msg = msg.Insert(msgindex, startTag);


        msgindex += searchStringLength + skip;

    } while (msgindex != -1);

    Label1.Text = msg;
string msg=Label1.Text;
字符串搜索=“香烟”;
int searchStringLength=search.Length;
字符串startTag=“”;
字符串endTag=“”;
int skip=startTag.Length+endTag.Length;
int-msgindex=0;
做
{
msgindex=msg.IndexOf(search,msgindex,StringComparison.OrdinalIgnoreCase);
如果(msgindex==-1)中断;
msg=msg.Insert((msgindex+searchStringLength),endTag);
msg=msg.Insert(msgindex,startTag);
msgindex+=searchStringLength+跳过;
}而(msgindex!=-1);
Label1.Text=msg;

我无法替换,因为搜索字符串可能区分大小写。对于ex香烟,可能会被雪茄替换。替换区分大小写。如果您正在处理Html,您可能需要
Html.Encode
返回字符串。无论如何,这样做来添加样式是不好的。如果我需要快速解决方法,我会选择
JQuery.css
one。嗨,谢谢你的回复。我喜欢代码中的一个小调整。这与我的情况完全吻合。在这里,我想突出显示字符串中的所有三个单词香烟。德里大学的一名学生维尼特(Vineet)已经开始抽更长时间的香烟,他说,为了减少每天的香烟消费量,产量应该采用开箱即用的方法。香烟对健康有不良影响谢谢你的努力。这个解决方案的唯一问题是,它还突出了
   $("p").html(function(index, value) {
    return value.replace(/\b(cigarette)\b/g, '<strong class="test">$1</strong>');
});
   .test {
    color: #ff0000;
}
string search = "cigaret";
Label1.Text = Label1.Text.Replace(search, "<span style='color: red;'>" + search + "</span>");
    string msg = Label1.Text;

    string search = "cigarette";
    int searchStringLength  = search.Length;

    string startTag = "<span style='color: red;'>";
    string endTag = "</span>";
    int skip = startTag.Length + endTag.Length;

    int msgindex = 0;


    do
    {
        msgindex = msg.IndexOf(search, msgindex, StringComparison.OrdinalIgnoreCase);
        if (msgindex == -1) break;

        msg= msg.Insert((msgindex + searchStringLength), endTag);
        msg = msg.Insert(msgindex, startTag);


        msgindex += searchStringLength + skip;

    } while (msgindex != -1);

    Label1.Text = msg;