C#提取以特定字母开头的部分字符串

问题描述 投票:-1回答:2

我有一个字符串,我从这样的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的一部分直到下一个“/”符号?

有人可以帮我解决这个问题吗?

c# regex string substring startswith
2个回答
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
投票

虽然已经有了一个公认的答案,但我还是想在不使用Regex的情况下分享另一种解决方案。只需在输入+它的长度中找到模式的位置,所以想要的文本将成为下一个字符。找到结束,在想要的文本开始后搜索第一个“/”:

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();
© www.soinside.com 2019 - 2024. All rights reserved.