c#正则表达式模式

本文关键字:模式 正则表达式 | 更新日期: 2023-09-27 18:03:04

与我昨天的问题类似:c# Regex模式难题

同样的问题,不同的正则表达式模式。当在http://sourceforge.net/projects/regextester/和http://www.RegexLib.com中测试时,regex模式返回所需的匹配,但是,当在。net中执行该模式时,没有返回匹配。
string SampleText = @"'r'n99. Sample text paragraph one.'r'n100. Sample text here paragraph two.'r'n101. Sample text paragraph three.'r'n";
string RegexPattern = @"(?<=''r''n'd+'.'s)([^.]+?)here.*?(?=''r''n)";
Regex FindRegex = new Regex(@RegexPattern, RegexOptions.Multiline | RegexOptions.Singleline);
Match m = FindRegex.Match(SampleText);

期望的匹配是"Sample text here paragraph two "。

与昨天一样,我不确定,如果问题是我的正则表达式模式或我的代码。

c#正则表达式模式

您还需要转义特殊的regex字符:

string RegexPattern = @"(?<=''r''n'd+'.'s)([^.]+?)here.*?(?=''r''n)";

或:

string RegexPattern = "(?<=''''r''''n''d+''.''s)([^.]+?)here.*?(?=''''r''''n)";

不要忘记——你是在c#字符串上下文中,所以你需要确保你传递给正则表达式引擎的是正确的字符串。

我明白了。

在RegexTester和RegexLib.com中测试时,我从立即窗口复制并粘贴了源文本,该窗口将控制返回换行转换为其文本表示'r'n。

所以,我的正则表达式在测试环境中工作。但是,在实际运行时,源文本包含控制返回换行,而不是作为文本的'r'n。这解释了为什么我的模式在测试环境中工作,而不是在运行时。

我把图案改成了@"(?<='n'd+'.'s)([^.]+?)here.*?(?='n)",效果很好。

尴尬的实现。谢谢你的帮助Oded。