首页 > 解决方案 > string.IndexOf 忽略转义序列

问题描述

我正在尝试提取 LDAP DN 字符串的 CN。

这是一个说明问题的示例字符串

var dn = @"CN=Firstname Lastname\, Organization,OU=some ou,DC=company,DC=com";

我想要的是第一个非转义 ',' 字符的位置,它位于第 32 位。

var pos = dn.IndexOf(',');

返回第一个逗号,无论是否转义。现在我IndexOf可以跳过字符串中的转义逗号吗?

标签: c#stringindexof

解决方案


您可以使用正则表达式:

string s = @"CN=Firstname Lastname\, Organization,OU=some ou,DC=company,DC=com";
Regex regex = new Regex("(?<!\\\\),", RegexOptions.Compiled);
int firstMatch = regex.Matches(s).FirstOrDefault()?.Index ?? -1;

演示:https ://regex101.com/r/Jxco8K/1

它使用了否定的lookbehind,所以检查所有逗号并查看它是否前面没有反斜杠。


推荐阅读