假设我收到多个不同的字符串,例如
"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
重载与匹配评估器(请参阅 demo ):
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
- 尾随单词边界
关于c# - 查找字符串中的十六进制数,然后将其转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34993061/