0

我有一个已经创建的页面源的字符串。我需要从字符串中抓取几行文本。我需要的字符串在另外两个字符串之间。这两个字符串是"keywords":", "

如何在"keywords":等引号后搜索带有冒号的字符串 ?

我会使用正则表达式吗?

谢谢你。

4

4 回答 4

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);
于 2013-10-16T06:34:35.750 回答
1

以下正则表达式将匹配“关键字”和“,”之间的所有内容:

Regex r = new Regex("keywords:(.*),");
Match m = r.Match(yourStringHere);

foreach(Group g in m.Groups) {
    // do your work here
}
于 2013-10-16T06:37:01.897 回答
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;
}
于 2013-10-16T07:00:47.087 回答
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 "";
    }
于 2013-10-16T06:36:42.237 回答