如何去除字符串,只保留整数?
我有一个字符串(01 - ABCDEFG)
我需要仅获取(01)
input = Regex.Replace(input, "[^0-9]+", string.Empty);
有四种不同的方法可以做到这一点(也许还有更多,但我选择了这些)。
#1:Bala R的正则表达式
string output = Regex.Replace(input, "[^0-9]+", string.Empty);
#2:来自Donut和agent-j的正则表达式
string output = Regex.Match(input, @"\d+").Value;
#3: Linq
string output = new string(input.ToCharArray().Where(c => char.IsDigit(c)).ToArray());
#4: 子字符串,为了使其起作用,破折号必须位于数字和文本之间。
string output = input.Substring(0, input.IndexOf("-")).Replace(" ", "");
使用这些输入:
string input1 = "01 - ABCDEFG";
string input2 = "01 - ABCDEFG123";
对于1和2,结果如下:
output1 = "01";
output2 = "01123";
对于3和4,结果将是:
output1 = "01";
output2 = "01";
如果期望结果是获取字符串中的所有数字,请使用#1或#2,但如果期望结果仅是获取破折号前面的数字,请使用#3或#4。
对于像这样短的字符串,#1和#2的速度大致相同,#3和#4也是如此,但如果有大量迭代或字符串长度增加到四倍以上,则#2比#1更快,而#4比#3更快。
注意: 如果字符串中包括括号,则必须将#4修改为以下内容,但这不会使其变慢:
string output = input.Substring(0, input.IndexOf("-")).Replace(" ", "").Replace("(", "");
尝试这个:
Convert.ToInt32(string.Join(null, System.Text.RegularExpressions.Regex.Split(s, "[^\\d]")))
它返回整数值1。
你应该使用正则表达式--它们是一种非常强大的方式,可以将文本字符串与特定模式匹配,这是一个很好的使用场景。
模式 "\d+
" 将匹配 1 个或多个数字的序列。使用此模式从字符串中提取所有数字的简单方法如下:
public static List<int> ExtractInts(string input)
{
return Regex.Matches(input, @"\d+")
.Cast<Match>()
.Select(x => Convert.ToInt32(x.Value))
.ToList();
}
你可以像这样使用它:
List<int> result = ExtractInts("( 01 - ABCDEFG )");
如果需要更详细的正则表达式信息,请参阅此页面(MSDN)或此页面(有用的“备忘单”)。
看看这篇博客文章: http://weblogs.asp.net/sushilasb/archive/2006/08/03/How-to-extract-numbers-from-string.aspx
一个使用正则表达式从字符串中提取数字的简单程序。
class Program
{
static void Main(string[] args)
{
Console.WriteLine(ExtractNumbers("( 01 - ABCDEFG )")); // 01
Console.ReadLine();
}
static string ExtractNumbers(string expr)
{
return string.Join(null, System.Text.RegularExpressions.Regex.Split(expr, "[^\\d]"));
}
}
希望这能帮到你!
string snum = System.Text.RegularExpression.Regex.Match(s, "\d+").Value;
int num;
if (!int.TryParse(snum, out num))
throw new Exception();
string str = "01567438absdg34590";
string result = "";
result = Regex.Replace(str, @"[^\d]", "");
Console.WriteLine(result);
Console.Read();
输出:0156743834590
Response.Write(Convert.ToDecimal(string.Join(null, System.Text.RegularExpressions.Regex.Split(TextBox1.Text, "[^\\d .]"))));
这适用于整数(int
)和小数(decimal
)。
你也可以使用这种方式来获得你需要的答案。
string sentence = "10 cats, 20 dogs, 40 fish and 1 programmer";
string[] digits= Regex.Split(sentence, @"\D+");
foreach (string value in digits)
{
int number;
if (int.TryParse(value, out number))
{
Debug.Log(value);
}
}
试试这个:
string XYZ = string.Join(null, System.Text.RegularExpressions.Regex.Split(“XYZ 77”, “[^\d]”));