Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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,我想使用正则表达式从表示混合alpha语句的字符串中提取一系列数字 示例: "Please buy 40 kg of apples for 1350$ each" --> "40|1350" "Please call 8 0 0 4 3 2 1 2 4 3 from 17:00 till 22:00" --> "8004321243|1700|2200" "I would like to bid 50 euro on 20 black an

我想使用正则表达式从表示混合alpha语句的字符串中提取一系列数字

示例:

"Please buy 40 kg of apples for 1350$ each"                  --> "40|1350"
"Please call 8 0 0 4 3 2 1 2 4 3 from 17:00 till 22:00"      --> "8004321243|1700|2200"
"I would like to bid 50 euro on 20 black and pair of spades" --> "50|20"

因此,只提取数字,中间的任何单词都被截断为分隔符。如果数字由非单词字符分隔,则它们被视为与第二个示例中相同的数字。

您可以先尝试搜索数字,然后再搜索数字加非单词字符,然后清除正则表达式匹配:

var str = "Please call 8 0 0 4 3 2 1 2 4 3 from 17:00 till 22:00";

var regex1 = new Regex(@"([\d]+[\d\W]*)");
var regex2 = new Regex(@"([\W]+)");    

foreach (var match in regex1.Matches(str).Cast<Match>())
{
    var val = match.Groups[1].Value;    

    foreach (var nonWordMatch in regex2.Matches(val).Cast<Match>())
    {
        val = val.Replace(nonWordMatch.Value, "");
    }

    var number = Int64.Parse(val);
    Console.WriteLine(">> num " + number);
}
var str=“请在17:00至22:00期间致电8 00 4 3 2 1 2 4 3”;
var regex1=新的正则表达式(@“([\d]+[\d\W]*)”;
var regex2=新的正则表达式(@“([\W]+)”);
foreach(regex1.Matches(str.Cast()中的变量匹配)
{
var val=match.Groups[1]。值;
foreach(regex2.Matches(val.Cast()中的var nonWordMatch)
{
val=val.Replace(nonWordMatch.Value,“”);
}
var number=Int64.Parse(val);
Console.WriteLine(“>>num”+number);
}
StringBuilder编号=新建StringBuilder();
列表测试=新列表();
foreach(字符c在s中)
{
if(字符IsDigit(c)){
编号。附加(c);
}
else如果(c=''| | c==':'){
//不穿衣服
}
否则{
如果(number.Length>0){
test.add(number.ToString());
number.Clear();
}
}
}

使用
正则表达式删除所有非单词字符。替换(s,@“\W+”,“”)
,然后使用简单的
\d+
模式提取所有数字块:

var res = Regex.Matches(Regex.Replace(s, @"\W+", ""), @"\d+")
       .Cast<Match>()
       .Select(m=>m.Value)
       .ToList();
var res=Regex.Matches(Regex.Replace(s,@“\W+”,“”),@“\d+”)
.Cast()
.选择(m=>m.Value)
.ToList();

请参见。

工作原理!谢谢
var res = Regex.Matches(Regex.Replace(s, @"\W+", ""), @"\d+")
       .Cast<Match>()
       .Select(m=>m.Value)
       .ToList();