C# 获取标记之间的文本
嘿,我有一个如下的输入字符串:C# 获取标记之间的文本,c#,regex,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(); 将代码更改为: Regex regex = new Regex(@"\[c\](.*)\[/c\]"); var
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 regex = new Regex(@"\[c\](.*)\[/c\]");
var v = regex.Match(post.Content);
string s = v.Groups[1].Value;
你在找这样的东西吗
var regex = new Regex(@"(?<=\[c\]).*?(?=\[/c\])");
foreach(Match match in regex.Matches(someString))
Console.WriteLine(match.Value);
<代码> var ReGeX =新正则表达式(@)(?< p>您可以不使用代码> ReXEX < /代码>。考虑此扩展方法:
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]
指:
匹配字符组
中的任何单个字符
请注意,\、*、+、?、|、{、[、(,)、^、$、、、、、、、、、、、、、、、、和空白
都是,您必须使用\
才能在表达式中使用它们:
\[c\](.*)\[/c\]
正则表达式中的反斜杠字符\
表示它后面的字符是特殊字符,或者应该按字面解释
因此,如果您编辑正则表达式,您的代码应能正常工作:
Regex regex = new Regex("\[c\](.*)\[/c\]");
var v = regex.Match(post.Content);
string s = v.Groups[1].ToString();
借助@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;
}
此代码还考虑相同的开头标记,可以忽略标记大小写
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;
}
我试着使用正则表达式,但没用。你可以在线测试你的正则表达式。下面是我的改进版本