Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.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
“的正则表达式”;111->;c:\mysource\file1.cpp(无代码)";(C#)_C#_Regex - Fatal编程技术网

“的正则表达式”;111->;c:\mysource\file1.cpp(无代码)";(C#)

“的正则表达式”;111->;c:\mysource\file1.cpp(无代码)";(C#),c#,regex,C#,Regex,我需要在C#中解析具有以下内容的字符串: 我需要获得第一个数字和文件名,但只针对带有代码的记录(因此末尾不应该有代码)。 目前,我已经结束了这个雷克斯 new Regex(@"^(\d+) -> ([^\r\n]*)", RegexOptions.Multiline | RegexOptions.IgnoreCase) 这真的很简单,但它给了我线条,我不想看到。 我所有的尝试都失败了,比如写^(\d+)->([^\r\n]*)(?!\(无代码\)。 实际上,这可能是一个更一般的例子。例如

我需要在C#中解析具有以下内容的字符串:

我需要获得第一个数字和文件名,但只针对带有代码的记录(因此末尾不应该有代码)。 目前,我已经结束了这个雷克斯

new Regex(@"^(\d+) -> ([^\r\n]*)", RegexOptions.Multiline | RegexOptions.IgnoreCase)
这真的很简单,但它给了我线条,我不想看到。 我所有的尝试都失败了,比如写
^(\d+)->([^\r\n]*)(?!\(无代码\)
。 实际上,这可能是一个更一般的例子。例如:
如何以字符串形式匹配BBB“aaa BBB ccc”,其中BBB可以是任何字符集,aaa和ccc是已知的标记,它们与BBB中的字符集相同?

为什么不能使用:

^(\d+) -> ([\w:\\\s.]+)$
应用多行,它将不允许
(无代码)
,因为它不包含在最后一个组中(最后一个组的类中不允许使用括号)

如果确实需要在文件名中使用括号,则可以使用类似以下内容:

^(\d+) -> (.+?)(?<! \(no code\))$
^(\d+)->(.+?)(?
相反,它使用了一个负面的向后看(这样你就可以确保它不会出现在行尾之前)

我用c#测试了这一点,它对我有效

new Regex(@"^(\d+)\s->\s(.+\.\w+)(?!.*\(no code\))$", RegexOptions.Multiline | RegexOptions.IgnoreCase);
这和你的尝试没什么不同

^(\d+) -> ([^\r\n]*)(?! \(no code\))
但是我认为您的中间部分
([^\r\n]*)
非常匹配,因此负面展望将不再匹配

更新:

我测试了@Brad Christie的解决方案

new Regex(@"^(\d+) -> (.+?)(?<! \(no code\))$", RegexOptions.Multiline | RegexOptions.IgnoreCase);

newregex(@“^(\d+)->(.+?)(?你说的“无代码”是什么意思?@Cybernate:你为什么要编辑掉“无代码”“问题中的字符串……我认为这些是理解问题的关键。此外,我认为编辑示例正则表达式是不公平的,因为这正是他寻求帮助的地方。@BG100:重新添加了它。。我认为我在格式化问题时丢失了这些字符串。(无代码)只是一个文本字符串。它可以在文件名的末尾用空格分隔。在注释中有一些帮助,我得到了这个正则表达式:
^(\d+)->(.+?)(?它匹配不带代码的行(无代码)而且,不包含在结果组中。\r对于最后一行的情况,需要使用\z,但似乎您的演示使用的正则表达式引擎与.Net中的稍有不同,因为演示可以工作,而在.Net中它仍然捕获每一行,包括(无代码)@Vladimir,您一定在谈论第二个正则表达式。正则表达式由ActionScript 3提供动力,在AS3中,
$
\r\n
中的
\r\n
之前匹配(回车+换行)在.NET中,它匹配< <代码> \r>代码>和<代码> \n>代码>。在ReX中,ReEX是按原样工作的,但在本地,我必须这样改变:<代码> ^(\D+)->(.+)……………………(我认为它是.NET正则表达式中的一个bug),在你的问题中,向后看的方法比向前看的方法更正确。但是Brad的第一个正则表达式对我来说很好;有什么原因你不能使用它吗?@Brads,第一个示例与我的示例应用程序中的任何内容都不匹配。另外,我使用Expresso进行测试。我将此标记为答案,因为它接近正确。你只需重新执行Ce$with(\r |\z)来克服.net实现细节。第一个
根本不匹配任何内容。第二个,再次匹配所有字符串。实际上,这一个
^(\d+)->(.+?)(?很好,然后您发现了问题,我只使用\n作为换行符进行了测试。
new Regex(@"^(\d+) -> (.+?)(?<! \(no code\))$", RegexOptions.Multiline | RegexOptions.IgnoreCase);