Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 简单正则表达式匹配_C#_Regex - Fatal编程技术网

C# 简单正则表达式匹配

C# 简单正则表达式匹配,c#,regex,C#,Regex,我有一根绳子 String test = @"Lists/Versions/2_.000"; 我对如何使用正则表达式来实现这一点有点困惑 我在用这个模式 String pattern = @"\D+"; 正则表达式的msdn页面显示\D为“匹配除十进制数字以外的任何字符” 那么,它不应该返回“列表/版本/”和“2”吗 然而它的回归 “2”,“000” 我希望字符串只匹配2(或任何整数)。我该怎么做 String url = @"Lists/Versions/2_.000";

我有一根绳子

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);
        }


您收到此问题的原因是
/D
用于捕获非数字,因此它检测到两个独立的数值(
2
000
),因为
\ucode>。这就是它获取数据的方式。因此,您有两个选择:

  • 字符串
    分成可管理的部分,然后锚定到数组
  • 建立一个更好的分离模式
所以问题是,你想解析什么<代码>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]);
// 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);
}
它将查找所有整数值,因此应提供以下输出:

  • 2
  • 000

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

请尝试以下操作:

string url = @"Lists/Versions/2_.000";
var data = Regex.Split(url, @"\D+");
Console.WriteLine(@"Value: {0} and Secondary Value: {1}", data[0], data[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);
}
//使用System.Linq;
字符串url=@“Lists/Versions/2_uuu.000”;

字符串模式=@“(?十进制数字基本上是0-9,不管前面是否有点…所以\D基本上是任何不是数字的东西…包括标点符号和字母它为什么会返回两个?你是如何使用正则表达式的?我得到
列表/版本/
请编辑你的问题,详细解释一下是什么您希望它与什么规则匹配。您正在对非数字使用拆分…因此您的正则表达式在“list/Versions/”和“\ux”上进行拆分。“并返回它们之前和之后的内容。
\D+
将匹配每一块非数字的内容,并将这些内容视为要拆分的分隔符。结果是一个数组,包含所有不匹配的内容—数字和字符串的开头。