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

时间:2017-12-28 12:27:30

标签: c# regex string substring startswith

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

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

2 个答案:

答案 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;

说明:我们只是匹配您需要的确切模式。

  • 'offer-listing /'
  • 后跟(至少一个)'单词字符'(字母,数字,连字符等)的任意组合,
  • 然后是斜线。

括号()表示'捕获此组'(因此我们稍后可以使用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();