如何从动态字符串中提取特定单词

时间:2018-11-03 12:25:26

标签: c# string

我正在尝试使用c#从动态字符串值中选取或选择特定单词。

示例:

  

第20卷之前有一些文本

我想参加=> Vol.20

  

第一卷之前有一些文本

我想参加=>第1卷

  

这是 777卷之前的一些文本

我想参加=> 777卷

在示例中您可以看到,在Vol.20和Vol.1和Vol.777之前和之后始终都有文本,该字符串中唯一的常数也是Vol。[number]

我只想将Vol.Number作为字符串并保存。

1 个答案:

答案 0 :(得分:3)

您可以为此使用RegEx

string str = "Here is some Text before Vol.1 Here is some text after";

Regex rg = new Regex(@"Vol.\d*"); //If number reqired use Vol.\d+
Match match = rg.Match(str);
string result = match.Value;

match.Value将返回空字符串,如果找不到匹配项,或者您可以使用match.Success检查是否存在匹配项。

当然,您可以在不使用正则表达式的情况下进行操作,例如:

string result = string.Concat(str.Split(' ').Where(s => s.Contains("Vol.")));

但是我更喜欢正则表达式版本。

如果字符串中只有一个Vol.[Number],则所有这些版本都适用于多个实例,您可以执行以下操作:

string str = "Vol.551 Here is some Text before Vol.1 Vol.12 Here is some text after Vol.143";

Regex rg = new Regex(@"Vol.\d*"); //If number reqired use Vol.\d+

Match match = rg.Match(str);

MatchCollection matches = rg.Matches(str);

foreach (var item in matches)
{
    //Do something with item.Value
}

和非正则表达式版本:

string[] matches = str.Split(' ').Where(s => s.Contains("Vol.")).ToArray();

同样,我更喜欢正则表达式版本而不是上面的版本。但是,如果字符串不是太大,并且性能没有问题,则可以使用其中任何一个。

参考文献: Regex Class