在特定单词后选择子串

时间:2015-04-16 07:40:38

标签: c# html asp.net regex string

来自这样的字符串

<iframe width="560" height="315" src="https://www.youtube.com/embed/KRFHiBW9RE8" frameborder="0" allowfullscreen></iframe>

我只需要选择源,所以src =“我需要的字符串”

之间的单词

我尝试使用IndexOf单词src =“但链接没有固定数量的字符来设置结尾。

3 个答案:

答案 0 :(得分:10)

如果您尝试解析某些HTML代码 - 最好使用HTMLAgilityPack

但是在这种情况下,它只是从某个地方获得的一些字符串并且想要解析 - 您也可以使用regular expressions来完成:

string s ="<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/KRFHiBW9RE8\" frameborder=\"0\" allowfullscreen></iframe>";
var match = Regex.Match(s, "src=\"(.*?)\"");
string src;
if (match.Success)
    src = match.Groups[1].Value;

答案 1 :(得分:4)

一个天真的实现,我假设你有一个字符串作为输入:

string input = "<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/KRFHiBW9RE8\" frameborder=\"0\" allowfullscreen></iframe>";

if (input.Contains("src=\""))
{
    string output = input.Substring(input.IndexOf("src=\"") + 5);
    // output is: https://www.youtube.com/embed/KRFHiBW9RE8" frameborder="0" allowfullscreen></iframe>

    output = output.Substring(0, output.IndexOf("\""));
    // output is: https://www.youtube.com/embed/KRFHiBW9RE8
}

肯定会错过像src ="这样的边缘情况,但会给你一个开始的地方。显然这也是一个可以使用正则表达式解决的问题;我会把它留给其他人回答。

答案 2 :(得分:2)

我很想将所有属性拆分成一个数组,因为我可能以后也会想要其他一些属性。这样做还可以轻松访问'src'属性。所以我会做这样的事情:

string iFrameString = "<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/KRFHiBW9RE8\" frameborder=\"0\" allowfullscreen>";

//split properties based on spaces
string[] tagProps = iFrameString.Split(new Char[]{' '});

//get the property out.
string prop = "src=\"";
string source = Array.Find(tagProps, x => x.StartsWith(prop, StringComparison.InvariantCultureIgnoreCase));

string ModifiedSource = source.Substring(prop.Length,source.Length - prop.Length);

这样做的好处是你拥有阵列中的所有其他属性,如果需要你可以把它们拿出来。