c# - 简单的正则表达式匹配

标签 c# regex

我有一个字符串

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

我对如何使用正则表达式来执行此操作有点困惑。

我正在使用该模式

String pattern = @"\D+";

正则表达式的 msdn 页面显示\D 是“匹配十进制数字以外的任何字符”

那么它不应该返回 'Lists/Versions/' 、 '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);
        }

最佳答案

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

  • 字符串分成可管理的部分,然后锚定到数组。
  • 构建更好的分离模式。

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

我假设您也有一个拼写错误:

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

您应该能够使用:

您应该简单地执行以下操作:

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 。您还需要确保检查数组的边界。

关于c# - 简单的正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25672628/

相关文章:

regex - 仅忽略文件而不是目录的 .hgignore 语法?

mysql - 使用正则表达式加载数据查询

mysql - 如何确保大型文本/csv 文件中的任何位置都没有重复的单词?

javascript - 多行匹配的正则表达式

c# - 从字符串数组中搜索并忽略完全匹配的字符串

c# - C#中奇怪的 float 运算操作

c# - C#中的using语句和指令有什么区别?

regex - 如何将字符串向量转换为标题大小写

c# - 事件监听器委托(delegate)中的自引用 (C#)

c# - 编写 C# 客户端/服务器