[英]Regex to match a string after colon
输入字符串是这样的:OU = TEST:This001。 我们需要额外的“This001”。 最好的C#。
关于什么 :
/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);
资源:
“OU =”闻起来像是在进行Active Directory或LDAP搜索并响应结果。 虽然正则表达式是一个出色的工具,但我只是想确保您也了解用于解析,过滤和操作此类数据的优秀System.DirectoryServices.Protocols类。
特别是SearchResult,SearchResultEntry和DirectoryAttribute将是您可能正在寻找的朋友。 我不怀疑你可以像下一个人一样聪明地使用正则表达式或子串,但是在工具箱中使用另一个好工具也很好。
你试过这些课吗?
没有正则表达式的解决方案:
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)
指数
var str = "OU=TEST:This00:1";
var sw = new Stopwatch();
sw.Start();
var result = str.Substring(str.IndexOf(":") + 1);
sw.Stop();
// sw.ElapsedTicks == 40
获胜者:分裂
链接
如果OU=TEST:
是您要匹配的字符串之前的要求,请使用此正则表达式:
(?<=OU\s*=\s*TEST\s*:\s*).*
正则表达式匹配冒号后的任何文本长度,而冒号之前的任何文本只是一个要求。
您可以用[A-Za-z]+
替换TEST
以匹配TEST以外的任何文本,或者您可以用[\\w]+
替换TEST
以匹配任何长度的任何字母和数字组合。
\\s*
表示它可能是任意数量的空格或在该位置没有任何内容,如果您不需要这样的检查,请将其删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.