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

时间:2017-03-19 03:35:24

标签: c# regex

我想在C#应用程序中使用regex在最后一次出现“cn =”之后提取字符串。所以我需要的是“cn =”和 \ 字符的 last occurence 之间的字符串请注意,源字符串可能包含空格。

示例:

OU =公司\ OU =国家\ OU =站点\ CN =办公室\ CN =名\ OU =宠物

结果:

名称

到目前为止,我已经(?<=cn=).*用于选择cn =使用正向lookbehind之后的文本而(?:.(?!cn=))+$用于查找最后一次出现,但我不知道如何将它们组合在一起以获得所需结果。

3 个答案:

答案 0 :(得分:2)

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

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

参见 regex demo

C#demo

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);
        }
    }
}

答案 1 :(得分:1)

您可以使用否定前瞻:

<html>
<head>
<style>
div.divContainer{
    margin: 10em;
    background-color: darkorange;
    padding: 1em;
}
table{
background: steelblue;
}
</style>

</head>
<body>
<div class="divContainer">
        <table>
            <tr>
                    <td>
                        Name
                    </td>

                    <td>
                        Name
                    </td>
                    <td>
                        Name
                    </td>
            </tr>

            <tr>
                    <td>
                        Name
                    </td>
                    <td>
                        Name
                    </td>
                    <td>
                        Name
                    </td>
            </tr>

            <tr>
                    <td>
                    Name
                    </td>
                    <td>
                        Name
                    </td>
                    <td>
                        Name
                    </td>
            </tr>

            <tr>
                    <td>
                    Name
                    </td>
                    <td>
                        Name
                    </td>
                    <td>
                        Name
                    </td>
            </tr>

            <tr>
                    <td>
                    Name
                    </td>
                    <td>
                        Name
                    </td>
                    <td>
                        Name
                    </td>
            </tr>

            <tr>
                    <td>
                    Name
                    </td>
                    <td>
                        Name
                    </td>
                    <td>
                        Name
                    </td>
            </tr>

            <tr>
                    <td>
                    Name
                    </td>
                    <td>
                        Name
                    </td>
                    <td>
                        Name
                    </td>
            </tr>

    </table>
</div>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script>    


d3.select('table').on('mouseover',efunc1)

function efunc1(){
    alert("adf")
}

d3.select('table').on('mouseout',efunc)

function efunc(){
    alert("mouseout")
}


d3.select("tr").attr("pointer-events", "none")
d3.select("td").attr("pointer-events", "none")
// d3.select('table').on('mouseover',function(){d3.event.stopPropagation();})
d3.select('tr').on('mouseover',function(){d3.event.stopPropagation();})
// d3.select('td').on('mouseover',function(){alert("inside td")})


// d3.select('table').on('mouseout',function(){d3.event.stopPropagation();})
d3.select('tr').on('mouseout',function(){d3.event.stopPropagation();})
// d3.select('td').on('mouseout',function(){d3.event.stopPropagation();})

</script>

</body>

</html>

选择小组cn=(?!.*cn=)([^\\]+) 并查看a demo on regex101.com。作为完整的$1代码,请参阅a demo on ideone.com

<小时/> 要只拥有一个论坛,请添加另一个lookaround

C#

答案 2 :(得分:1)

使用capturing group获取所需部分的另一个想法。

string pattern = @"^.*cn=(\w+)";

提取的匹配将在m.Groups[1] (see demo)