我有一个字符串
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
捕获非数字,因此它检测到两个单独的数值(2
和 000
) 因为 _
。这就是它获取数据的方式。所以你有几个选择:
- 将
字符串
分成可管理的部分,然后锚定到数组。 - 构建更好的分离模式。
所以问题是,你想解析什么? 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/