C# 仅从字母数字混合字符串中提取数字
我想使用正则表达式从表示混合alpha语句的字符串中提取一系列数字 示例: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
"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();