我有一个包含两个或更多数字的字符串。以下是一些例子:
"(1920x1080)"
" 1920 by 1080"
"16 : 9"
如何从中提取单独的数字,例如“1920”和“1080”,假设它们只会被一个或多个非数字字符分隔?
答案 0 :(得分:11)
基本正则表达式为:
[0-9]+
您需要使用该库来检查所有匹配项并获取其值。
var matches = Regex.Matches(myString, "[0-9]+");
foreach(var march in matches)
{
// match.Value will contain one of the matches
}
答案 1 :(得分:5)
您可以按照
获取字符串MatchCollection v = Regex.Matches(input, "[0-9]+");
foreach (Match s in v)
{
// output is s.Value
}
答案 2 :(得分:1)
(\d+)\D+(\d+)
之后,自定义此正则表达式以匹配您将使用的语言的风格。
答案 3 :(得分:1)
你可以使用
string[] input = {"(1920x1080)"," 1920 by 1080","16 : 9"};
foreach (var item in input)
{
var numbers = Regex.Split(item, @"\D+").Where(s => s != String.Empty).ToArray();
Console.WriteLine("{0},{1}", numbers[0], numbers[1]);
}
输出:
1920,1080
1920,1080
16,9
答案 4 :(得分:0)
但仍然存在一个问题,所有上述答案都会考虑12i或a2有效数字。
以下内容可以解决此问题
var matches = Regex.Matches(input, @"(?:^|\s)\d+(?:\s|$)");
但是这个解决方案又增加了一个问题:)这将捕获整数周围的空格。为了解决这个问题,我们需要将整数的值捕获到一个组中:
MatchCollection matches = Regex.Matches(_originalText, @"(?:^|\s)(\d+)(?:\s|$)");
HashSet<string> uniqueNumbers = new HashSet<string>();
foreach (Match m in matches)
{
uniqueNumbers.Add(m.Groups[1].Value);
}