ちょっと、次のような入力文字列があります。
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]
意味:
の任意の 1 文字に一致し
character_group
ます。
\, *, +, ?, |, {, [, (,), ^, $,., #
とwhite space
は文字エスケープ\
であり、式で使用するには使用する必要があることに注意してください。
\[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;
}
コードを次のように変更します。
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);