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]

方法:

匹配character_group.

请注意,\, *, +, ?, |, {, [, (,), ^, $,., #andwhite 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

将您的代码更改为:

Regex regex = new Regex(@"\[c\](.*)\[/c\]");
var v = regex.Match(post.Content);
string s = v.Groups[1].Value;
于 2012-12-20T23:57:47.063 回答
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 回答
0

你在找这样的东西吗?

var regex = new Regex(@"(?<=\[c\]).*?(?=\[/c\])");
foreach(Match match in regex.Matches(someString))
    Console.WriteLine(match.Value);
于 2012-12-20T23:58:34.783 回答
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;
    }
于 2020-01-07T22:10:21.190 回答