How to know which option in Regex was matched?

Nir*_*rMH 0 c# regex

I have a Regex that match multiple option.

E.g. ^0x[\da-fA-F]+|-?\d+$ -- a Regex for Match either decimal or hex literals

Is there an option to know which option was eventually match the pattern?

so for...

  • -10 - the decimal option was matched
  • 0x1Af - the hex option was matched

Swe*_*per 5

我想你是说这个正则表达式:

^(?:-?\d+|0x[\da-fA-F]+)$
Run Code Online (Sandbox Code Playgroud)

起点和终点锚点不是替代方案的一部分。

您可以捕获不同的选择:

^(?:(-?\d+)|(0x[\da-fA-F]+))$
Run Code Online (Sandbox Code Playgroud)

现在,您只需要检查组是否不为空。如果它与第一个备选方案匹配,则组1将为非null。如果它与第二个选项匹配,则组2将为非null:

Match m = Regex.Match(...);
if (m.Groups[1] != null) {
    // first alternative matched!
} else if (m.Groups[2] != null) {
    // second alternative matched!
}
Run Code Online (Sandbox Code Playgroud)

您还可以命名组,以使代码更具可读性:

^(?:(?<decimal>-?\d+)|(?<hex>0x[\da-fA-F]+))$
Run Code Online (Sandbox Code Playgroud)

现在,您应该检查m.Groups["decimal"]m.Groups["hex"]