嘿,我有一个如下所示的输入字符串:
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();
您可以在没有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]");
在正则表达式中
[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();
将您的代码更改为:
Regex regex = new Regex(@"\[c\](.*)\[/c\]");
var v = regex.Match(post.Content);
string s = v.Groups[1].Value;
捎带@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;
}
你在找这样的东西吗?
var regex = new Regex(@"(?<=\[c\]).*?(?=\[/c\])");
foreach(Match match in regex.Matches(someString))
Console.WriteLine(match.Value);
此代码还考虑了相同的开始标签,并且可以忽略标签大小写
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;
}