string test = "1 test"
string test1 = " 1 test"
string test2 = "test 99"
我该如何这样吗?
#1 楼
遍历字符串并使用Char.IsDigit
string a = "str123";
string b = string.Empty;
int val;
for (int i=0; i< a.Length; i++)
{
if (Char.IsDigit(a[i]))
b += a[i];
}
if (b.Length>0)
val = int.Parse(b);
评论
@Thomas:该代码无效,结果为b ==“ System.Linq.Enumerable ..”。正确(甚至更简单)是b = String.Join(“”,a.Where(char.IsDigit))
– BlueRaja-Danny Pflughoeft
15年5月29日在3:38
好一点,那会教我不要测试我用注释编写的代码!您还可以使用新的string(char [])构造函数从char数组生成字符串。
–托马斯
15年6月2日在8:32
正则表达式做得更好。
–Jason Kelley
2015年8月11日在20:31
@BlueRaja-Danny Pflughoeft为什么不对您的评论做一个正确的答复,以便我可以投票:-)
– SteveC
16年8月10日在10:37
注意:如果字符串包含多个数字,此答案将它们全部一起运行为一个数字。例如。 “ a12bcd345”结果为“ 12345”。 (取决于目标,这是否可取。)这与投票最多的Regex解决方案不同,后者在上述情况下将返回“ 12”。这对于电话号码“ 555-111-2222”这样的情况很重要。
–ToolmakerSteve
17-10-24在17:53
#2 楼
\d+
是整数的正则表达式。因此,//System.Text.RegularExpressions.Regex
resultString = Regex.Match(subjectString, @"\d+").Value;
返回一个字符串,该字符串包含
subjectString
中第一个出现的数字。 >评论
要支持负数,可以使用Regex.Match(subjectString,@“-?\ d +”)。Value代替
–琼·李斯特
2014年6月10日20:54
这个答案还不完整(在C#中)。它仅获得字符串中的第一个数字。您必须仔细看一下匹配项:resultString = string.Join(string.Empty,Regex.Matches(subjectString,@“ \ d +”)。OfType
–马库斯
2014年7月26日4:53
@Markus:问题指出“我需要提取字符串中包含的数字”,所有示例均显示字符串中存在单个数字。遍历单个项目没有用。
–蒂姆·皮茨克(Tim Pietzcker)
2014年7月26日7:23
@ayman:哦,逗号是数千个分隔符?这将需要更复杂的正则表达式-应该在单独的问题中处理。一个很好的起点是Regular-Expressions.info,它也包含.NET的正则表达式引擎的各个部分。
–蒂姆·皮茨克(Tim Pietzcker)
2014年11月19日在18:26
@DavidSopko:你在说什么?原始问题要求在标题和问题正文中从字符串中提取单个数字的方法。除原始作者之外,其他人随后对该问题的编辑(在我回答后的第一年及以后)将标题更改为“数字”。如果有的话,应该回滚该错误的编辑。
–蒂姆·皮茨克(Tim Pietzcker)
2015年9月10日下午21:39
#3 楼
这是我清理电话号码以仅获取数字的方法:string numericPhone = new String(phone.Where(Char.IsDigit).ToArray());
评论
字符串numericPhone = new String(phone.Where(Char.IsDigit).ToArray());
–Damith
2014年4月8日在5:19
非常优雅的解决方案..我喜欢使用linq
– Leo Gurdian
18年1月25日在21:41
整数的不错解决方案!请注意,如果您尝试解析十进制数字,这将不起作用,因为小数点不是数字。
–伊莱贾·洛夫格伦(Elijah Lofgren)
19年5月11日在21:36
#4 楼
使用正则表达式...Regex re = new Regex(@"\d+");
Match m = re.Match("test 66");
if (m.Success)
{
Console.WriteLine(string.Format("RegEx found " + m.Value + " at position " + m.Index.ToString()));
}
else
{
Console.WriteLine("You didn't enter a string containing a number!");
}
#5 楼
我用来获取没有标点的电话号码的方法...var phone = "(787) 763-6511";
string.Join("", phone.ToCharArray().Where(Char.IsDigit));
// result: 7877636511
#6 楼
Regex.Split可以从字符串中提取数字。您将获得在字符串中找到的所有数字。string input = "There are 4 numbers in this string: 40, 30, and 10.";
// Split on one or more non-digit characters.
string[] numbers = Regex.Split(input, @"\D+");
foreach (string value in numbers)
{
if (!string.IsNullOrEmpty(value))
{
int i = int.Parse(value);
Console.WriteLine("Number: {0}", i);
}
}
输出:
编号:4
编号:40
编号:30
编号:10
#7 楼
这是Linq
版本:string s = "123iuow45ss";
var getNumbers = (from t in s
where char.IsDigit(t)
select t).ToArray();
Console.WriteLine(new string(getNumbers));
评论
那么简单地“ 123iuow45ss” .AsEnumerable()。Where(char.IsDigit)呢?
–伊利亚·伊万诺夫(Ilya Ivanov)
13年1月18日在13:23
我只是不喜欢从t ..选择t冗余,但无论如何,欢呼。
–伊利亚·伊万诺夫(Ilya Ivanov)
13年1月18日在13:47
#8 楼
使用Regex的另一个简单解决方案您应该需要使用此
using System.Text.RegularExpressions;
,代码是
string var = "Hello3453232wor705Ld";
string mystr = Regex.Replace(var, @"\d", "");
string mynumber = Regex.Replace(var, @"\D", "");
Console.WriteLine(mystr);
Console.WriteLine(mynumber);
评论
这不是问题的实质,而是我在寻找的!非常感谢你!
–布伦丹·盖茨(Brendan Getz)
10月2日,11:48
#9 楼
您也可以尝试一下string.Join(null,System.Text.RegularExpressions.Regex.Split(expr, "[^\d]"));
评论
很好,但是如果原始字符串中的数字之间有空格,那么它将为您提供1个大的串联字符串,并且两个数字都连接在一起(无空格)
–穆罕默德·泽克拉拉
6月17日9:41
#10 楼
只需使用RegEx来匹配字符串,然后进行转换:Match match = Regex.Match(test , @"(\d+)");
if (match.Success) {
return int.Parse(match.Groups[1].Value);
}
#11 楼
string input = "Hello 20, I am 30 and he is 40";
var numbers = Regex.Matches(input, @"\d+").OfType<Match>().Select(m => int.Parse(m.Value)).ToArray();
评论
这是给我我想要的最好的答案,它是字符串中多个数字的数组。如果只能忽略数字逗号(千位分隔符),那将是完美的! :-)
– Sagar
18年6月13日在19:54
#12 楼
这是另一种Linq
方法,该方法从字符串中提取第一个数字。 string input = "123 foo 456";
int result = 0;
bool success = int.TryParse(new string(input
.SkipWhile(x => !char.IsDigit(x))
.TakeWhile(x => char.IsDigit(x))
.ToArray()), out result);
示例:
string input = "123 foo 456"; // 123
string input = "foo 456"; // 456
string input = "123 foo"; // 123
#13 楼
对于那些希望从两行正则表达式的字符串中获取十进制数字的人:#14 楼
您可以使用如下所示的String
属性来执行此操作:#15 楼
var match=Regex.Match(@"a99b",@"\d+");
if(match.Success)
{
int val;
if(int.TryParse(match.Value,out val))
{
//val is set
}
}
#16 楼
如果数字有小数点,则可以在下面使用using System;
using System.Text.RegularExpressions;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
//Your code goes here
Console.WriteLine(Regex.Match("anything 876.8 anything", @"\d+\.*\d*").Value);
Console.WriteLine(Regex.Match("anything 876 anything", @"\d+\.*\d*").Value);
Console.WriteLine(Regex.Match("6435", @"\d+\.*\d*").Value);
Console.WriteLine(Regex.Match("6.435", @"\d+\.*\d*").Value);
}
}
}
结果:
“任何东西876.8” ==> 876.8
“任何东西876任何” => 876
“ $ 876435” ==> 876435
“ $ 876.435” ==> 876.435
示例:https://dotnetfiddle.net/IrtqVt
评论
非常感谢您的回答。我正在使用C#和VS2017,并试图弄清楚如何找到该值。再次感谢您的回答。
–气泡
1月10日18:33
#17 楼
问题并没有明确指出您只想要0到9个字符,但相信您的示例集和注释中的内容是正确的也就不算什么了。因此,这是执行此操作的代码。 ,罗马数字,货币分子,带圆圈的数字和特定于脚本的数字。#18 楼
var outputString = String.Join("", inputString.Where(Char.IsDigit));
获取字符串中的所有数字。
因此,如果您使用“ 1加2”作为示例,则会得到“ 12”。
#19 楼
扩展方法来获取字符串中包含的所有正数: public static List<long> Numbers(this string str)
{
var nums = new List<long>();
var start = -1;
for (int i = 0; i < str.Length; i++)
{
if (start < 0 && Char.IsDigit(str[i]))
{
start = i;
}
else if (start >= 0 && !Char.IsDigit(str[i]))
{
nums.Add(long.Parse(str.Substring(start, i - start)));
start = -1;
}
}
if (start >= 0)
nums.Add(long.Parse(str.Substring(start, str.Length - start)));
return nums;
}
如果还需要负数,只需修改此代码即可处理减号(
-
) /> 输入以下内容:
"I was born in 1989, 27 years ago from now (2016)"
得到的数字列表将是:
#20 楼
Ahmad Mageed在这里提供了一种有趣的方法,它使用Regex和StringBuilder
按它们在字符串中出现的顺序提取整数。基于Ahmad Mageed的帖子使用
Regex.Split
的示例如下:var dateText = "MARCH-14-Tue";
string splitPattern = @"[^\d]";
string[] result = Regex.Split(dateText, splitPattern);
var finalresult = string.Join("", result.Where(e => !String.IsNullOrEmpty(e)));
int DayDateInt = 0;
int.TryParse(finalresult, out DayDateInt);
#21 楼
问题的答案之一是否相反:如何使用Regex.Replace从字符串中删除数字?
// Pull out only the numbers from the string using LINQ
var numbersFromString = new String(input.Where(x => x >= '0' && x <= '9').ToArray());
var numericVal = Int32.Parse(numbersFromString);
#22 楼
string verificationCode ="dmdsnjds5344gfgk65585";
string code = "";
Regex r1 = new Regex("\d+");
Match m1 = r1.Match(verificationCode);
while (m1.Success)
{
code += m1.Value;
m1 = m1.NextMatch();
}
评论
此代码用于查找字符串中的所有整数值。
–Manoj Gupta
13年2月27日在5:58
最好直接在答案中添加一些描述,而不是将其作为注释单独发布。评论并非总是立即可见。
– John Dvorak
13年2月27日在6:16
#23 楼
这是我的算法 //Fast, C Language friendly
public static int GetNumber(string Text)
{
int val = 0;
for(int i = 0; i < Text.Length; i++)
{
char c = Text[i];
if (c >= '0' && c <= '9')
{
val *= 10;
//(ASCII code reference)
val += c - 48;
}
}
return val;
}
#24 楼
static string GetdigitFromString(string str)
{
char[] refArray = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
char[] inputArray = str.ToCharArray();
string ext = string.Empty;
foreach (char item in inputArray)
{
if (refArray.Contains(item))
{
ext += item.ToString();
}
}
return ext;
}
评论
尝试了其他方法,例如正则表达式等。但这是最简单易懂的方法!
– Macindows
11月10日下午2:58
#25 楼
这是我的解决方案string var = "Hello345wor705Ld";
string alpha = string.Empty;
string numer = string.Empty;
foreach (char str in var)
{
if (char.IsDigit(str))
numer += str.ToString();
else
alpha += str.ToString();
}
Console.WriteLine("String is: " + alpha);
Console.WriteLine("Numeric character is: " + numer);
Console.Read();
#26 楼
您将必须使用Regex作为\d+
\d
匹配给定字符串中的数字。#27 楼
string s = "kg g L000145.50\r\n";
char theCharacter = '.';
var getNumbers = (from t in s
where char.IsDigit(t) || t.Equals(theCharacter)
select t).ToArray();
var _str = string.Empty;
foreach (var item in getNumbers)
{
_str += item.ToString();
}
double _dou = Convert.ToDouble(_str);
MessageBox.Show(_dou.ToString("#,##0.00"));
#28 楼
使用上面的@ tim-pietzcker答案,以下将适用于PowerShell
。PS C:\> $str = '1 test'
PS C:\> [regex]::match($str,'\d+').value
1
#29 楼
基于上一个示例,我创建了一个方法:private string GetNumberFromString(string sLongString, int iLimitNumbers)
{
string sReturn = "NA";
int iNumbersCounter = 0;
int iCharCounter = 0;
string sAlphaChars = string.Empty;
string sNumbers = string.Empty;
foreach (char str in sLongString)
{
if (char.IsDigit(str))
{
sNumbers += str.ToString();
iNumbersCounter++;
if (iNumbersCounter == iLimitNumbers)
{
return sReturn = sNumbers;
}
}
else
{
sAlphaChars += str.ToString();
iCharCounter++;
// reset the counter
iNumbersCounter = 0;
}
}
return sReturn;
}
评论
这个数字可能是负数吗?如果是这样,将如何处理“你好-你好吗?-30”?约翰,您好,数据中没有负数
像1.5这样的小数?像1.5E45这样的指数表示法?
相似(但不完全相同):stackoverflow.com/questions/1561273/…
为什么这里没有答案?