我有一个已经创建的页面源的字符串。我需要从字符串中抓取几行文本。我需要的字符串在另外两个字符串之间。这两个字符串是"keywords":和", "
如何在"keywords":等引号后搜索带有冒号的字符串 ?
我会使用正则表达式吗?
谢谢你。
在你的情况下,正则表达式太强大了,无法使用它来解决这样的问题。只需使用string.IndexOf()
和string.Substring()
。获取单词的位置,获取最近逗号的位置 - 在 IndexOf 中有一个重载,可让您指定搜索的起始位置。
这是一个代码片段,它解释得更多,然后我可以用文字来做。
var text = "\"keywords\":some text you want,and a text you do not want";
var searchFor = "\"keywords\":";
int firstIndex = text.IndexOf(searchFor);
int secondIndex = text.IndexOf(",", firstIndex);
var result = text.Substring(firstIndex + searchFor.Length, secondIndex - searchFor.Length);
以下正则表达式将匹配“关键字”和“,”之间的所有内容:
Regex r = new Regex("keywords:(.*),");
Match m = r.Match(yourStringHere);
foreach(Group g in m.Groups) {
// do your work here
}
这应该跨多行工作。
string input = @"blah blah blah ""keywords"":this is " + Environment.NewLine + "what you want right?, more blah...";
string pattern = @"""keywords"":(.*),";
Match match = Regex.Match(input, pattern, RegexOptions.Singleline);
if (match.Success)
{
string stuff = match.Groups[1].Value;
}
您可以尝试这样,而不使用正则表达式
string str = "This is an example string and my data is here";
string first = "keywords:";
string second = ",";
int Start, End;
if (str.Contains(first) && str.Contains(second))
{
Start = str.IndexOf(first, 0) + first.Length;
End = str.IndexOf(second, Start);
return str.Substring(Start, End - Start);
}
else
{
return "";
}