4

ちょっと、次のような入力文字列があります。

Just a test Post [c] hello world [/c] 

出力は次のようになります。

こんにちは世界

誰でも助けることができますか?

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

Regex regex = new Regex("[c](.*)[/c]");
var v = regex.Match(post.Content);
string s = v.Groups[1].ToString();
4

6 に答える 6

10

なしでこれを行うことができますRegex。次の拡張方法を検討してください。

public static string GetStrBetweenTags(this string value, 
                                       string startTag, 
                                       string endTag)
{
    if (value.Contains(startTag) && value.Contains(endTag))
    {
        int index = value.IndexOf(startTag) + startTag.Length;
        return value.Substring(index, value.IndexOf(endTag) - index);
    }
    else
        return null;
}

そしてそれを使用します:

string s = "Just a test Post [c] hello world [/c] ";
string res = s.GetStrBetweenTags("[c]", "[/c]");
于 2012-12-21T00:01:24.987 に答える
5

正規表現で

[character_group]

意味:

の任意の 1 文字に一致しcharacter_groupます。

\, *, +, ?, |, {, [, (,), ^, $,., #white space文字エスケープ\であり、式で使用するには使用する必要があることに注意してください。

\[c\](.*)\[/c\]

正規表現のバックスラッシュ文字\は、その後に続く文字が特殊文字であるか、文字どおりに解釈する必要があることを示します。

正規表現を編集した場合にコードが正しく動作するように:

Regex regex = new Regex("\[c\](.*)\[/c\]");
var v = regex.Match(post.Content);
string s = v.Groups[1].ToString();
于 2012-12-21T03:17:46.670 に答える
1

@horghの答えに便乗して、これは包括的/排他的オプションを追加します:

public static string ExtractBetween(this string str, string startTag, string endTag, bool inclusive)
{
    string rtn = null;

    int s = str.IndexOf(startTag);
    if (s >= 0)
    {
        if(!inclusive)
            s += startTag.Length;

        int e = str.IndexOf(endTag, s);
        if (e > s)
        {
            if (inclusive)
                e += startTag.Length;

            rtn = str.Substring(s, e - s);
        }
    }

    return rtn;
}
于 2013-09-15T02:03:56.313 に答える
1

コードを次のように変更します。

Regex regex = new Regex(@"\[c\](.*)\[/c\]");
var v = regex.Match(post.Content);
string s = v.Groups[1].Value;
于 2012-12-20T23:57:47.063 に答える
0

このようなものをお探しですか?

var regex = new Regex(@"(?<=\[c\]).*?(?=\[/c\])");
foreach(Match match in regex.Matches(someString))
    Console.WriteLine(match.Value);
于 2012-12-20T23:58:34.783 に答える