Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用c语言构建正则表达式#_C#_Regex - Fatal编程技术网

C# 用c语言构建正则表达式#

C# 用c语言构建正则表达式#,c#,regex,C#,Regex,我有一些像这样的字符串: DEV_NUM_26-某些类型…支持某些函数的TYPE0 我的目标是获取下一个数据:(id=26,type=TYPE0) 表达式如下所示: (?<id>(?<=DEV_NUM_) \d{0,3}) \s-\s (?<name>(?<=Some \s type \.+) \w+) (?(相反,将不希望包含的部分放在命名捕获组之外。注意:我从表达式中删除了肯定的Lookbehind断言,因为它们在这里确实不必要 String s

我有一些像这样的字符串:

DEV_NUM_26-某些类型…支持某些函数的TYPE0

我的目标是获取下一个数据:(id=26,type=TYPE0)

表达式如下所示:

    (?<id>(?<=DEV_NUM_) \d{0,3}) \s-\s (?<name>(?<=Some \s type \.+) \w+)

(?(相反,将不希望包含的部分放在命名捕获组之外。注意:我从表达式中删除了肯定的Lookbehind断言,因为它们在这里确实不必要

String s = "DEV_NUM_26 - Some type...TYPE0 with support of some functions";
Match m  = Regex.Match(s, @"DEV_NUM_(?<id>\d{0,3})\s-\sSome\stype\.+(?<name>\w+)");
if (m.Success)
    Console.WriteLine(m.Groups["id"].Value);   //=> "26"
    Console.WriteLine(m.Groups["name"].Value); //=> "TYPE0"
String s=“DEV_NUM_26-某些类型…支持某些函数的TYPE0”;
Match m=Regex.Match(s,@“DEV_NUM_(?\d{0,3})\s-\sSome\stype\.+(?\w+);
如果(m.成功)
Console.WriteLine(m.Groups[“id”].Value);//=>“26”
Console.WriteLine(m.Groups[“name”].Value);//=>“TYPE0”
如果你想缩短你的表达,你可以写为

@"(?x)DEV_NUM_ (?<id>\d+) [^.]+\.+ (?<name>\w+)"
@“(x)DEV\u NUM(d+)[^.]+\.+(?\w+)

请参见下面hwnd的答案以了解有效的正则表达式。但要解释为什么您的正则表达式不起作用,这是因为第二个零宽度正查找忽略了前面的文本实际上存在于正在计算的字符串中的事实。因此,
(?)感谢您的解释!
@"(?x)DEV_NUM_ (?<id>\d+) [^.]+\.+ (?<name>\w+)"