【问题标题】:How to distinguish hexadecimal number and decimal number in Regex expression?Regex表达式中如何区分十六进制数和十进制数?
【发布时间】: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?以及如何解决这个问题?

我的测试代码和执行结果如下。

感谢阅读。

【问题讨论】:

标签: c# regex


【解决方案1】:

您的十六进制模式有错误。你不应该用[] 包围0x,因为它意味着字符集并且只会匹配一个字符。

试试下面的十六进制模式

(?<iAZ>0x[0-9]+)

如果您不希望您的十进制模式与您的十六进制数字匹配,请尝试在十进制模式的开头添加^

【讨论】:

    猜你喜欢
    • 2018-10-21
    • 2022-11-16
    • 2011-12-09
    • 2014-01-06
    • 1970-01-01
    • 2019-04-25
    • 2018-08-16
    • 1970-01-01
    相关资源
    最近更新 更多