c# - 查找字符串中的十六进制数,然后将其转换为十进制

标签 c# regex

假设我收到多个不同的字符串,例如

"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-f0-9 字符范围中的一个或多个字符
  • \b - 尾随单词边界

关于c# - 查找字符串中的十六进制数,然后将其转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34993061/

相关文章:

Python,正则表达式替换字符串包含 “/” 、 “(” 和 “)”

c# - Process.Start 未被识别

c# - codefirst 数据库未创建

c# - PCL 文件中的自定义异常

sql - 我如何在 PostgreSQL 中使用正则表达式来删除字段匹配模式的结尾?

java - 使用正则表达式在java中分割字符串

c# - Selenium chrome 驱动程序 click() 方法并不总是点击元素

c# - 当 T 在编译时未知时,将 IEnumerable 转换为 IEnumerable<T>

c# - C# Unity 中的正则表达式

javascript - 用于匹配重音字符的正则表达式