我有一个字符串,我从这样的HTML文档中提取:
var elas = htmlDoc.DocumentNode.SelectSingleNode("//a[@class='a-size-small a-link-normal a-text-normal']");
if (elas != null)
{
//
_extractedString = elas.Attributes["href"].Value;
}
HREF属性包含字符串的这一部分:
gp/offer-listing/B002755TC0/
我正在尝试提取B002755TC0
值,但问题是字符串会因长度而异,我不能简单地使用C#提供的字符串方法来提取该值...
相反,我在想是否有一种聪明的方法可以做到这一点,或许是我搜索的字符串的匹配开头?
例如,我知道每个href都有这样的结构,所以我只是匹配这些关键字:
offer-listing/
所以我会找到这个关键字并开始提取字符串B002755TC0
的一部分直到下一个“/”符号?
有人可以帮我解决这个问题吗?
答案 0 :(得分:3)
对于regular expression来说,这是一个完美的工作:
string text = "gp/offer-listing/B002755TC0/";
Regex pattern = new Regex(@"offer-listing/(\w+)/");
Match match = pattern.Match(text);
string whatYouAreLookingFor = match.Groups[1].Value;
说明:我们只是匹配您需要的确切模式。
括号()
表示'捕获此组'(因此我们稍后可以使用match.Groups [1]提取它。)
编辑:如果你想从中提取:/dp/B01KRHBT9Q/
然后你可以使用这种模式:
Regex pattern = new Regex(@"/(\w+)/$");
将匹配此字符串和前一个字符串。 $
代表字符串的结尾,因此字面意思是:
捕获字符串
的最后两个斜杠之间的字符答案 1 :(得分:1)
虽然已经有一个已接受的答案,但我想到了在不使用正则表达式的情况下共享另一个解决方案。只需在输入+它的长度中找到模式的位置,所以想要的文本将成为下一个字符。找到结束,在想要的文本开始后搜索第一个“/”:
string input = "gp/offer-listing/B002755TC0/";
string pat = "offer-listing/";
int begining = input.IndexOf(pat)+pat.Length;
int end = input.IndexOf("/",begining);
string result = input.Substring(begining,end-begining);
如果你想要的输出总是最后一块,你也可以使用split并得到最后一块非空的部分:
string result2 = input.Split(new string[]{"/"},StringSplitOptions.RemoveEmptyEntries)
.ToList().Last();