正则表达式获取匹配后的文本,该文本必须是最后一次出现。

5
我希望在C#应用程序中使用正则表达式提取"cn="最后一次出现后的字符串。所以我需要找到在"cn="的最后一次匹配\字符之间的字符串。请注意,源字符串可能包含空格。 示例: ou=company\ou=country\ou=site\cn=office\cn=name\ou=pet 结果: name 到目前为止,我已经得到了选择cn=后面文本的表达式(?<=cn=).*,并通过(?:.(?!cn=))+$找到了最后一次匹配,但我不知道如何将它们组合在一起以得到所需的结果。
3个回答

4

你可以尝试使用以下的正则表达式...

(?m)(?<=cn=)[\w\s]+(?=\\?(?:ou=)?[\w\s]*$)

请查看正则表达式示例

C# (演示)

using System;
using System.Text.RegularExpressions;

public class RegEx
{
    public static void Main()
    {
        string pattern = @"(?m)(?<=cn=)[\w\s]+(?=\\?(?:ou=)?[\w\s]*$)";
        string input = @"ou=company\ou=country\ou=site\cn=office\cn=name\ou=pet";

        foreach (Match m in Regex.Matches(input, pattern))
        {
            Console.WriteLine("{0}", m.Value);
        }
    }
}

cn=whatever的最后一次出现可能会跟随另一个子容器(\ou=whatever)。尝试仅使用转义符\删除ou,但得到了一个字符串"office instead"。 - pandemic

2

2

请问您能否修改正则表达式,使其匹配但选择不包含"cn= "的值?目前匹配本身已经完美无缺。@Jan - pandemic
@pandemic:只需使用另一个环视:https://regex101.com/r/GDZJDS/2,已更新答案。 - Jan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接