在标签之间获取文本

时间:2012-12-20 23:51:27

标签: c# regex

嘿,我有一个如下所示的输入字符串:

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();

6 个答案:

答案 0 :(得分:7)

您可以在没有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]");

答案 1 :(得分:5)

在正则表达式中

[character_group]

表示:

  

匹配character_group中的任何单个字符。

请注意,\, *, +, ?, |, {, [, (,), ^, $,., #white spaceCharacter Escapes,您必须使用\在表达式中使用它们:

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

正则表达式中的反斜杠字符\表示其后面的字符是特殊字符,或者应按字面解释。

如果你编辑你的正则表达式,你的代码应该正常工作:

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

答案 2 :(得分: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;
}

答案 3 :(得分:0)

将您的代码更改为:

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

答案 4 :(得分:0)

你在找这样的东西吗?

var regex = new Regex(@"(?<=\[c\]).*?(?=\[/c\])");
foreach(Match match in regex.Matches(someString))
    Console.WriteLine(match.Value);

答案 5 :(得分:0)

此代码还考虑了相同的开始标签,并且可以忽略标签大小写

 public static string GetTextBetween(this string value, string startTag, string endTag, StringComparison stringComparison = StringComparison.CurrentCulture)
    {
        if (!string.IsNullOrEmpty(value))
        {
            int startIndex = value.IndexOf(startTag, stringComparison) + startTag.Length;
            if (startIndex > -0)
            {
                var endIndex = value.IndexOf(endTag, startIndex, stringComparison);
                if (endIndex > 0)
                {
                    return value.Substring(startIndex, endIndex - startIndex);
                }
            }
        }
        return null;
    }