嘿,我有一个如下所示的输入字符串:
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();
答案 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 space
为Character 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;
}