我想在C#应用程序中使用regex在最后一次出现“cn =”之后提取字符串。所以我需要的是“cn =”和 \ 字符的 last occurence 之间的字符串请注意,源字符串可能包含空格。
示例:
OU =公司\ OU =国家\ OU =站点\ CN =办公室\ CN =名\ OU =宠物
结果:
名称
到目前为止,我已经(?<=cn=).*
用于选择cn =使用正向lookbehind之后的文本而(?:.(?!cn=))+$
用于查找最后一次出现,但我不知道如何将它们组合在一起以获得所需结果。
答案 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
C#
答案 2 :(得分:1)
使用capturing group获取所需部分的另一个想法。
string pattern = @"^.*cn=(\w+)";
^.*cn=
会消耗^
从cn=
开始到最后一次出现的任何内容(请参阅greed)。(\w+)
第一组捕获一个或多个word characters。这是demo at regex101。提取的匹配将在m.Groups[1]
(see demo)。