简单的正则表达式匹配

时间:2014-09-04 18:28:26

标签: c# regex

我有一个字符串

String test = @"Lists/Versions/2_.000";

我对如何使用正则表达式做这一点感到有点困惑。

我正在使用模式

String pattern = @"\D+";

正则表达式的msdn页面说\ D是"匹配除十进制数字以外的任何字符"

所以不应该返回'列表/版本/' ,' 2'?

然而它的回归

'' ,' 2',' 000'

我希望字符串只匹配2(或任何整数)。我该怎么做?

String url = @"Lists/Versions/2_.000";
        String pattern = @"\D+";

        string[] substrings = Regex.Split(url, pattern);    
        foreach (string match in substrings)
        {
            Console.WriteLine("'{0}'", match);
        }

3 个答案:

答案 0 :(得分:2)

您收到此问题的原因是因为/D要捕获非数字,因此它会检测到两个单独的数值(2000),因为{{1 }}。这就是抓取数据的方式。所以你有几个选择:

  • _分成可管理的部分,然后锚定到数组。
  • 构建一个更好的模式来分离。

所以问题是,你要解析什么? string?或者您是否尝试在2.00中分隔数字?

我假设你也有拼写错误:

  • \ d匹配数字字符。相当于[0-9]。
  • \ D匹配非数字字符。相当于[^ 0-9]。
  • \ w匹配任何单词字符,包括下划线。相当于 “[A-ZA-Z0-9 _]”。
  • \ W匹配任何非单词字符。相当于“[^ A-Za-z0-9 _]”。

你应该可以使用:

您应该执行以下操作:

string

那应该找到所有整数值,因此它应该提供输出:

  • string url = @"Lists/Versions/2_.000"; var data = Regex.Split(url, @"\D+"); Console.WriteLine(@"Value: {0} and Secondary Value: {1}", data[0], data[1]);
  • 2

哪个应该以正常000返回。我的语法或表达式可能已关闭,但您可以为正则表达式here找到一个很好的备忘单。您还需要确保检查数组的边界。

答案 1 :(得分:1)

https://dotnetfiddle.net/BU6gp2

using System;
using System.Text.RegularExpressions;

public class Program
{
    public static void Main()
    {
        String url = @"Lists/Versions/2_.000";
        String pattern = @"\D+";

        string[] substrings = Regex.Split(url, pattern);    

        Console.WriteLine("'{0}'", substrings[1]);

    }
}

答案 2 :(得分:1)

请尝试以下方法:

// using System.Linq;

String url = @"Lists/Versions/2_.000";
String pattern = @"(?<=/)\d+";

string[] substrings = Regex.Matches(url, pattern)
                           .Cast<Match>()
                           .Select(_ => _.Value)
                           .ToArray();    
foreach (string match in substrings)
{
    Console.WriteLine("'{0}'", match);
}

或者,如果您不需要阵列。

String url = @"Lists/Versions/2_.000";
String pattern = @"(?<=/)\d+";

Console.WriteLine("'{0}'", Regex.Match(url, pattern).Value);