让我们说我收到了多个不同的字符串,比如
"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"
答案 0 :(得分:3)
对匹配评估者使用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
- 尾随字边界答案 1 :(得分:0)
这应该有效:
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());
}
十六进制数在输入变量中更改,如果匹配