正则表达式捕获字符串之间的字符串
Regex catch string between strings
我创建了一个小函数来捕获字符串之间的字符串。
public static string[] _StringBetween(string sString, string sStart, string sEnd)
{
if (sStart == "" && sEnd == "")
{
return null;
}
string sPattern = sStart + "(.*?)" + sEnd;
MatchCollection rgx = Regex.Matches(sString, sPattern);
if (rgx.Count < 1)
{
return null;
}
string[] matches = new string[rgx.Count];
for (int i = 0; i < matches.Length; i++)
{
matches[i] = rgx[i].ToString();
//MessageBox.Show(matches[i]);
}
return matches;
}
但是,如果我这样调用我的函数:_StringBetween("[18][20][3][5][500][60]", "[", "]");
它会失败。一种方法是,如果我更改此行 string sPattern = "\" + sStart + "(.*?)" + "\" + sEnd;
但是我不能,因为我不知道这个字符是括号还是单词。
抱歉,如果这是一个愚蠢的问题,但我找不到类似的搜索。
A way would be if i changed this line string sPattern = "\" + sStart + "(.*?)" + "\" + sEnd;
However i can not because i don't know if the character is going to be a bracket or a word.
您可以通过调用 Regex.Escape
:
来转义所有元字符
string sPattern = Regex.Escape(sStart) + "(.*?)" + Regex.Escape(sEnd);
这会导致 sStart
和 sEnd
的内容按字面解释。
我创建了一个小函数来捕获字符串之间的字符串。
public static string[] _StringBetween(string sString, string sStart, string sEnd)
{
if (sStart == "" && sEnd == "")
{
return null;
}
string sPattern = sStart + "(.*?)" + sEnd;
MatchCollection rgx = Regex.Matches(sString, sPattern);
if (rgx.Count < 1)
{
return null;
}
string[] matches = new string[rgx.Count];
for (int i = 0; i < matches.Length; i++)
{
matches[i] = rgx[i].ToString();
//MessageBox.Show(matches[i]);
}
return matches;
}
但是,如果我这样调用我的函数:_StringBetween("[18][20][3][5][500][60]", "[", "]");
它会失败。一种方法是,如果我更改此行 string sPattern = "\" + sStart + "(.*?)" + "\" + sEnd;
但是我不能,因为我不知道这个字符是括号还是单词。
抱歉,如果这是一个愚蠢的问题,但我找不到类似的搜索。
A way would be if i changed this line string
sPattern = "\" + sStart + "(.*?)" + "\" + sEnd;
However i can not because i don't know if the character is going to be a bracket or a word.
您可以通过调用 Regex.Escape
:
string sPattern = Regex.Escape(sStart) + "(.*?)" + Regex.Escape(sEnd);
这会导致 sStart
和 sEnd
的内容按字面解释。