使用正则表达式从字符串中获取值?

时间:2011-10-31 11:39:55

标签: c# regex

我有一个字符串“第1页,共15页”。

我需要得到值15,因为这个值可以是1到100之间的任何数字。我想弄明白:

  1. 如果正则表达式最适合此处。考虑字符串永远不会改变也许只是用空格分割字符串?或者更好的解决方案。

  2. 如何使用正则表达式获取值。

7 个答案:

答案 0 :(得分:4)

您可以使用正则表达式:Page \d+ of (\d+)

Regex re = new Regex(@"Page \d+ of (\d+)");
string input = "Page 1 of 15";
Match match = re.Match(input);
string pages = match.Groups[1].Value;

表达式分析:在()之间捕获一个组。 \d代表数字,+代表一位或多位数字。请注意,确切地说很重要,因此也要复制空格。

代码有点冗长,但我认为这样可以更好理解。通过拆分,您只需要:var pages = input.Split(' ')[3];,看起来更容易,但容易出错。正则表达式很容易扩展到一次抓住字符串的其他部分。

答案 1 :(得分:3)

var myString = "Page 1 of 15";
var number = myString.SubString(myString.LastIndexOf(' ') + 1);

如果字符串末尾有空格的风险,则应用TrimEnd方法:

var number = myString.SubString(myString.TrimEnd().LastIndexOf(' ') + 1);

答案 2 :(得分:2)

我认为一个简单的String.Replace()是最简单,最易读的解决方案。

string myString = "Page 1 of 15";
string pageNumber = myString.Replace("Page 1 of ", "");

修改

上述解决方案假定字符串永远不会是Page 2 of 15。如果第一个页码可以更改,则需要使用String.Split()代替。

string myString = "Page 1 of 15";
string pageNumber = myString.Split(new string[] {"of"}, 
                                   StringSplitOptions.None).Last().Trim();

答案 3 :(得分:1)

如果字符串格式永远不会改变,那么你可以尝试这个......

string input = "Page 1 of 15";
string[] splits = input.Split(' ');
int totalPages = int.Parse(splits[splits.Length - 1]);

答案 4 :(得分:1)

如果这是你必须处理的唯一情况,只需用空格分割字符串并使用解析第4部分的整数。这样的东西会起作用:

string input = "Page 1 of 15";
string[] splitInput = string.Split(' ');

int numberOfPages = int.Parse(splitInput[3]);

答案 5 :(得分:0)

在c#中它应该是这样的(使用Regex类):

     Regex r = new Regex(@"Page \d+ of (\d+)");
     var str = "Page 1 of 15";
     var mathes = r.Matches(str);

您的回复将在:mathes[0].Groups[1]

答案 6 :(得分:0)

你不需要正则表达式。只是最后一个空格的索引       string var =“1 of 100”;

        string secondvar = string.Empty;
        int startindex = var.LastIndexOf(" ");
        if (startindex > -1)
        {
          secondvar =  var.Substring(startindex +1);
        }