我有一个复杂的问题,我必须在C#编码中根据十六进制值分割一个字符串列表。以下是字符串列表。
例如,如果我得到HEX值20000,则正确的对应值为 14 , 1 / 2FAST_16384 。因此,我需要将其分成3个不同的值,即a) 1/2 b) FAST 和c) 16384 。也许,有人可以就如何实现它提出一些想法,因为字符串的长度和模式是不一致的。还不确定是否可以使用Regex来解决这个问题。
答案 0 :(得分:0)
您可以使用此正则表达式:
var regex = new Regex("(?<a>(\\(\\d+;\\d+\\))|(\\d+\\/\\d+))(?<b>[^\\(_]+)(_(?<c>[^\\(]+))?");
var input = "1/2FAST_1024(0x8000)";
var match = regex.Match(input);
var a = match.Groups["a"].Value; // a is "1/2";
var b = match.Groups["b"].Value; // b is "FAST";
var c = match.Groups["c"].Success // c is optional
? match.Groups["c"].Value // in this case it will be "1024"
: string.Empty;
现在您可以将输入分组:
{{1}}
您可以看到演示here
答案 1 :(得分:0)
您可以在3组中捕获您的值:
^(\(?\d+[/;]\d+\)?)([A-Z-]+)(?:_(\d+))?
<强>解释强>
^ # Assert position at the beginning of the string. ( # Capture in a group (group 1) \(? # Match optional opening parenthesis \d+ # match one or more digits [/;] # Match forward slash or semicolon \d+ # Match One or more digits \)? # Match optional closing parenthesis ) # Close captured group ( # Capture in a group (group 2) [A-Z-]+ # Match an uppercase character or a hyphen one or more times ) # Close captured group (?: # A non capturing group _ # Match an underscore (\d+) # Capture one or more digits in a group (group 3) )? # Close non capturing group and make it optional