例如我有一个字符串“99,999 ABC XYZ
”
现在我想转换为整数“99999
”
我制作了一个有效的代码:
var regex = new Regex("[A-z]");
linksOnPage = regex.Replace(linksOnPage, "");
regex = new Regex(" ");
linksOnPage = regex.Replace(linksOnPage, "");
int noPage = int.Parse(regex.Replace(linksOnPage, ""),
NumberStyles.AllowThousands);
但我觉得这还不够好,有人能帮助我缩短它吗?
答案 0 :(得分:3)
此Regex
将删除所有字母和空格:
var regex = new Regex(" |[A-z]");
linksOnPage = regex.Replace(linksOnPage, "");
您可以使用int.Parse
并添加NumberStyles.AllowThousands
标记:
int num = int.Parse(linksOnPage , NumberStyles.AllowThousands);
或int.TryParse
告诉您操作是否成功:
int num;
if (int.TryParse(linksOnPage , NumberStyles.AllowThousands,
CultureInfo.InvariantCulture, out num))
{
// parse successful, use 'num'
}
或者你也可以试试这个:
int num = int.Parse(linksOnPage.Replace(",", ""));
答案 1 :(得分:1)
这是我的方法,虽然不是很短:
public static void Main(string[] args)
{
string input = "99,999 ABC XYZ";
var chars = input.ToCharArray().ToList();
var builder = new StringBuilder();
foreach (var character in chars)
{
if (char.IsNumber(character))
builder.Append(character);
}
int result = 0;
int.TryParse(builder.ToString(), out result);
Console.WriteLine(result);
Console.ReadKey();
}
答案 2 :(得分:0)
int? ParseIntFromString( string s )
{
Match m = rxInt.Match(s) ;
int? value = m.Success ? int.Parse( m.Value , NumberStyles.AllowLeadingSign|NumberStyles.AllowThousands ) : (int?)null ;
return value ;
}
static Regex rxInt = new Regex( @"^-?\d{1,3}(,\d\d\d)*");
如果没有找到整数值,则返回值为null
,如果没有,则返回解析后的值。
请注意,匹配通过^
锚定在字符串的开头;如果你想匹配字符串中任何地方的数字,只需删除它。
你也可以踢老派做这样的事情:
public int? ParseIntFromString( string s )
{
bool found = false ;
int acc = 0 ;
foreach( char c in s.Where( x => char.IsDigit )
{
found = true ;
acc += c - '0' ;
}
return found ? (int?)acc : (int?) null ;
}