0
string x = "I am a hunter, what do i do. <Name> is a good boy. His age is <Age> and a <occupation> of <Institute>. \n\n He is passionate about his <passion> and also a hardworking fellow. <WifeName> is his wife and she is a sweet girl, She loves her husband a lot. Her age is <WifeAge> and <occupation> of <Institute>";

このテキストは何の意味もありません。しかし、私がしなければならないのは、すべての「<」を「」に、すべて<b>の「>」を「</b>」に、すべての「\n\n」を「 」に置き換えること<br/>です。

私は使用しようとしました:

string y = replace(replace(x,"<","<b>"),">","</b>");

これは私を壊滅的な結果に導きました。何が起こったのか、皆さんは推測できると思います。今、私はこの交換のための簡単でシンプルな解決策を探しています。これを明確にできたらいいのにと思います。

4

7 に答える 7

1

提案されているように、これは正規表現で行うのが最適です。

次のようなことを試してください:

string x = "I am a hunter, what do i do. <Name> is a good boy. His age is <Age> and a <occupation> of <Institute>. \n\n He is passionate about his <passion> and also a hardworking fellow. <WifeName> is his wife and she is a sweet girl, She loves her husband a lot. Her age is <WifeAge> and <occupation> of <Institute>";
var y = Regex.Replace(x, "<(?<match>[^>.]*)>", "<b>${match}</b>");

正規表現が行うことは、< と > の間にある > を除くすべての文字に一致し、それを置き換えることです。グループ名は「match」と呼ばれますが、もちろん名前を変更できます。

于 2013-01-28T06:13:35.427 に答える
0

このコード スニペットを試してください。

string x = "I am a hunter, what do i do. <Name> is a good boy......";
string _val = x.Replace("<", "<b>");
_val = Regex.Replace(_val, "(?<!<b)>", "</b>");
于 2013-01-28T06:05:47.043 に答える
0

これが私がそれを行う方法です。

String y = Replace(Replace(Replace(Replace(x, "<", "{b}"), ">", "{/b}"), "}", ">"), "{", "<");

まず に変更<してからに{b}変更>{/b}

最後に、に変換{}します<>

于 2013-01-28T06:10:12.277 に答える
0

これは基本的に疑似 UBB 形式です。角かっこの代わりに、大なり小なり記号を使用しました。

正規表現を使用することをお勧めします。大まかなコードは次のとおりです。

var rgEx = new Regex("<(.+?)>");
string convertedString = rgEx.Replace("Hello is it <me> you're looking for?", "<b>$1</b>");

これに関する問題は、コードからレンダリングする一部の html コードを変換する可能性があることです。将来の問題を回避するために、標準のUBB形式を使用することをお勧めします

于 2013-01-28T06:12:11.420 に答える
0

したがって、私の理解が正しければ、<「太字の開始」を示すために「」を使用し、 >「太字の終了」を示すために「」を使用します。

次の呼び出しで一致する置換トークンで使用されるため、複合呼び出しを使用してもString.Replace明らかに機能しません。<

1 つの方法は、次のように、遭遇したときに置換を行い、それを新しい文字列に書き込むことです。

String input = "I am a hunter, what do i do...";
StringBuilder sb = new StringBuilder();
foreach(Char c in input) {

    switch(c) {
        case '<':
            sb.Append("<b>");
            break;
        case '>':
            sb.Append("</b>");
            break;
        case '\r':
            break; // ignore \r characters.
        case '\n':
            sb.Append("<br />");
            break;
        default:
            sb.Append( c );
            break;
    } 
}
return sb.ToString();
于 2013-01-28T06:12:15.923 に答える
0

問題は、置換値に、置換される元の文字のトークンが含まれていることです。あなたがする必要があるのは、元のテキスト内で見つかる可能性が低い中間トークンを使用することです.

var replacementList = new List<Tuple<string, string, string>>()
{
    Tuple.Create("<", "#OPENINGTOKEN#", "<b>"),
    Tuple.Create(">", "#CLOSINGTOKEN#", "</b>")
};

string x = "I am a hunter, what do i do. <Name> is a good boy.";

foreach (var tokenTriple in replacementList)
{
    x = x.Replace(tokenTriple.Item1, tokenTriple.Item2);
}

foreach (var tokenTriple in replacementList)
{
    x = x.Replace(tokenTriple.Item2, tokenTriple.Item3);
}
于 2013-01-28T06:13:35.180 に答える
0

これでできます。

// find words and whitespace between < and > 
String matchpattern = @"\<([\w\s]+)\>";  
// wrap them between <b> and </b> tags.
String replacementpattern = @"<b>$1</b>";
x = Regex.Replace(x,matchpattern,replacementpattern));
于 2013-01-28T06:14:15.590 に答える