我有一个已创建页面源的字符串。我需要从字符串中抓取几行文本。我需要的字符串是两个其他字符串之间。这两个字符串是“关键字”:和“,”
如何在引号后搜索带有冒号的字符串,例如“keywords”: ?
我会使用正则表达式吗?
谢谢。
答案 0 :(得分:2)
在你的情况下,正则表达式太强大了,无法使用它来解决这个问题。只需使用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);
答案 1 :(得分:1)
以下正则表达式将匹配“keywords”和“,”之间的所有内容:
Regex r = new Regex("keywords:(.*),");
Match m = r.Match(yourStringHere);
foreach(Group g in m.Groups) {
// do your work here
}
答案 2 :(得分:0)
您可以尝试这样做,而不使用正则表达式
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 "";
}
答案 3 :(得分:0)
这应该跨多行。
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;
}