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

本文关键字:获取 字符串 正则表达式 | 更新日期: 2023-09-27 18:12:46

我有一个字符串"Page 1 of 15"。

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

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

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

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

可以使用的正则表达式: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];,看起来更容易,但容易出错。regex很容易扩展,可以一次获取字符串的其他部分。

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

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

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

我认为简单的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();

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

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

如果这是您必须处理的唯一情况,只需用空格分隔字符串并将第4部分解析为整数。这样就可以了:

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

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

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

你的结果将在:mathes[0].Groups[1]

你不需要一个正则表达式。就是最后一个空间的索引String var = "1 of100";

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