我有一个字符串
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);
}
答案 0 :(得分:2)
您收到此问题的原因是因为/D
要捕获非数字,因此它会检测到两个单独的数值(2
和000
),因为{{1 }}。这就是抓取数据的方式。所以你有几个选择:
_
分成可管理的部分,然后锚定到数组。所以问题是,你要解析什么? string
?或者您是否尝试在2.00
中分隔数字?
我假设你也有拼写错误:
你应该可以使用:
您应该执行以下操作:
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);