正则表达式匹配冒号后的字符串

时间:2010-10-12 18:22:12

标签: c# regex

输入字符串是这样的:OU = TEST:This001。我们需要额外的“This001”。最好用C#。

4 个答案:

答案 0 :(得分:29)

怎么样:

/OU=.*?:(.*)/

以下是它的工作原理:

OU=  // Must contain OU=
.    // Any character
*    // Repeated but not mandatory
?    // Ungreedy (lazy) (Don't try to match everything)
:    // Match the colon
(    // Start to capture a group
  .    // Any character
  *    // Repeated but not mandatory
)    // End of the group

对于/,他们是分隔符,以了解正则表达式的起始位置和结束位置(以及添加选项)。

捕获的群组将包含This001

但是使用简单的Substring()会更快。

yourString.Substring(yourString.IndexOf(":")+1);

资源:

答案 1 :(得分:5)

“OU =”闻起来像是在进行Active Directory或LDAP搜索并对结果做出响应。虽然正则表达式是一个出色的工具,但我只是想确保您也了解用于解析,过滤和操作此类数据的优秀System.DirectoryServices.Protocols类。

特别是SearchResult,SearchResultEntry和DirectoryAttribute将是您可能正在寻找的朋友。我不怀疑你可以像下一个人那样聪明地使用正则表达式或子串,但是在工具箱中使用另一个好工具也很好。

您是否尝试过这些课程?

答案 2 :(得分:3)

没有正则表达式的解决方案:

var str = "OU=TEST:This00:1";
var result = str.Split(new char[] { ':' }, 2)[1];

// result == This00:1

Regex vs Split vs IndexOf

分割

var str = "OU=TEST:This00:1";

var sw = new Stopwatch();

sw.Start();
var result = str.Split(new char[] { ':' }, 2)[1];
sw.Stop();

// sw.ElapsedTicks == 15

正则表达式

var str = "OU=TEST:This00:1";

var sw = new Stopwatch();

sw.Start();
var result = (new Regex(":(.*)", RegexOptions.Compiled)).Match(str).Groups[1];
sw.Stop();

// sw.ElapsedTicks == 7000 (Compiled)

的IndexOf

var str = "OU=TEST:This00:1";

var sw = new Stopwatch();

sw.Start();
var result = str.Substring(str.IndexOf(":") + 1);
sw.Stop();

// sw.ElapsedTicks == 40

获胜者:拆分

<强>链接

答案 3 :(得分:0)

如果在您要匹配的字符串之前OU=TEST:是您的要求,请使用此正则表达式:

(?<=OU\s*=\s*TEST\s*:\s*).*

正则表达式匹配冒号后的任何文本长度,而冒号之前的任何文本只是一个要求。

您可以将TEST替换为[A-Za-z]+以匹配除TEST以外的任何文字,或者您可以将TEST替换为[\w]+以匹配任何长度的任何字母和号。

\s*表示该位置可能是任意数量的空格或任何内容,如果您不需要这样的检查,请将其删除。