正则表达式“(?<!^)(?=[AZ])”

Emo*_*Emo 4 c# regex

我花了大约三个小时试图了解如何"(?<!^)(?=[A-Z])"根据大写字母在 tring 上进行分割,即

string[] s = Regex.Split("TheWorldWithoutStrangers", "(?<!^)(?=[A-Z])");
Run Code Online (Sandbox Code Playgroud)

它是如何工作的 !!我确实明白上面表达式中每个字符的含义是什么,但我不明白它是如何一起工作的。为什么"(? < !^)([A-Z])"不起作用?这意味着每当你发现一个大写字母不在换行之后,然后拆分,我是对的吗?

Guf*_*ffa 5

表示^行的开头,并且(?<!...)是反向查找,因此(?<!^)匹配字符串中不位于行开头的任何位置。

该集合[A-Z]匹配任何大写字母,并且(?=...)是正向预测,因此(?=[A-Z])匹配字符串中大写字母之前的任何位置。

将它们放在一起,表达式会匹配字符串中不位于行首且位于大写字母之前的任何位置。