Regex表达式中如何区分十六进制数和十进制数?
Posted
技术标签:
【中文标题】Regex表达式中如何区分十六进制数和十进制数?【英文标题】:How to distinguish hexadecimal number and decimal number in Regex expression? 【发布时间】:2020-09-06 14:15:41 【问题描述】:我的英语水平很差,因为我不是以英语为母语的人。 本文如有粗鲁言论,敬请谅解。
我正在使用 .Net Core 的正则表达式库。 我想区分十六进制数和十进制数,所以我编写了一个代码来做到这一点。 但是代码没有被操作,所以我提取了我想要的核心逻辑,并在Test项目上新创建了以下代码。
string identPattern = "(?<rwC>[_a-zA-Z][_a-zA-Z0-9]*)";
string hexaPattern = "(?<iAZ>[0x][0-9]+)";
string decimalPattern = "(?<oKZ>[0-9]+)";
string pattern = string.Format("0|1|2", identPattern, hexaPattern, decimalPattern);
foreach (var data in Regex.Matches("0x10;", pattern, RegexOptions.Multiline | RegexOptions.ExplicitCapture))
var matchData = data as Match;
如果执行上面的代码“0x10”字符串的“0”匹配。 这意味着 "0x10" 字符串与 decimalPattern ("(?[0-9]+)") 匹配。这不是我想要的结果。 我希望“0x10”字符串与 hexaPattern 匹配。
为什么不匹配hexaPattern?以及如何解决这个问题?
我的测试代码和执行结果如下。
感谢阅读。
【问题讨论】:
见Regular expression for a hexadecimal number? 谢谢链接的文章对我很有用 【参考方案1】:您的十六进制模式有错误。你不应该用[]
包围0x
,因为它意味着字符集并且只会匹配一个字符。
试试下面的十六进制模式
(?<iAZ>0x[0-9]+)
如果您不希望您的十进制模式与您的十六进制数字匹配,请尝试在十进制模式的开头添加^
。
【讨论】:
以上是关于Regex表达式中如何区分十六进制数和十进制数?的主要内容,如果未能解决你的问题,请参考以下文章