在字符串中找到十六进制数,然后将其转换为十进制
本文关键字:转换 十进制 然后 字符串 十六进制数 | 更新日期: 2023-09-27 18:31:42
假设我收到多个不同的字符串,例如
"private var color:uint = 0xff000010"
"private var something:uint = 0xf2010"
"private var anotherNumber:int = 5435344"
我想检查字符串是否包含十六进制数,以及是否有一个可以用其十进制值替换它。对于转换,我认为这就足够了:
string hexToDecimal = int.Parse(color, System.Globalization.NumberStyles.HexNumber).ToString();
但是我是正则表达式的新手,我很难做整个算法来查找然后以简单的方式替换十六进制。
我将非常感谢任何帮助。提前谢谢。
更新:这是它应该能够转换的另一个示例:
"private var color:uint = 0xff000010 0x00000ff 'n0xffffff"
将Regex.Replace
重载与匹配评估器一起使用(请参阅演示):
var s = "private var color:uint = 0xff000010'nprivate var something:uint = 0xf2010'nprivate var anotherNumber:int = 5435344";
var res = Regex.Replace(s, @"(?i)'b0x([a-f0-9]+)'b", m => Hex2Dec(m.Groups[1].Value));
Console.WriteLine(res);
赋值器方法是
public static string Hex2Dec(string m)
{
return int.Parse(m, System.Globalization.NumberStyles.HexNumber).ToString();
}
输出:
private var color:uint = -16777200
private var something:uint = 991248
private var anotherNumber:int = 5435344
正则表达式匹配:
-
(?i)
- 使模式不区分大小写 -
'b
- 字边界 -
0x
-0x
的文字序列 -
([a-f0-9]+)
- 组 1 匹配a-f
或0-9
字符范围内的一个或多个字符 -
'b
- 尾随词边界
这应该有效:
string input = "private var color:uint = 0xff000010";
Match match = Regex.Match(input, @".*(0x[0-9a-fA-F]+).*", RegexOptions.IgnoreCase);
if (match.Success)
{
string key = match.Groups[1].Value;
uint hexToDecimal = (uint)new System.ComponentModel.UInt32Converter().ConvertFromString(key);
input = input.Replace(key, hexToDecimal.ToString());
}
输入变量中的十六进制数更改(如果匹配)