如何使用Regex.Split按单斜杠分割字符串,忽略双斜杠?
解决Regex.Split忽略双斜杠、仅分割单个正斜杠的问题
我太懂你这个需求了——就是想把像https://www.linkedin.com/in/someone这样的URL,按单个正斜杠分割,但要跳过开头的双斜杠,最终得到https://www.linkedin.com、in、someone这三部分对吧?之前用负向前瞻没成功,大概率是正则的断言方向搞反了,我来给你捋清楚。
问题根源:为什么直接用/分割不行?
如果直接用Regex.Split(url, "/"),会把https://拆成https:、空字符串、www.linkedin.com,完全不符合预期——因为双斜杠里的第二个/也被当成了分割符。我们需要的是:只分割那些前面没有紧跟着另一个/的单个/。
正确的正则表达式:负向后瞻断言
你需要用的是负向后瞻而不是负向前瞻,对应的正则是:(?<!/)\/
解释一下这个正则的逻辑:
(?<!/):这是负向后瞻断言,意思是“当前位置的前面不能是/”\/:匹配单个正斜杠(转义是因为在正则里/是特殊字符)
这样一来,双斜杠里的第二个/因为前面有一个/,会被断言排除,不会被当成分割符;而/in/里的两个/前面都没有紧跟着/,就会被正常分割。
代码示例(以C#和JavaScript为例)
C# 实现
string url = "https://www.linkedin.com/in/someone"; string[] result = Regex.Split(url, @"(?<!/)\/"); // 输出结果:["https://www.linkedin.com", "in", "someone"]
JavaScript 实现
const url = "https://www.linkedin.com/in/someone"; const result = url.split(/(?<!\/)\//); // 输出结果:["https://www.linkedin.com", "in", "someone"]
为什么之前的/(?!/)不行?
你之前尝试的负向前瞻/(?!/),逻辑是“匹配后面没有/的/”,但这会把https://里的第二个/也匹配到(因为它后面是www而不是/),导致分割出空字符串,完全达不到你想要的效果。所以方向一定要搞对:我们要排除的是前面有/的/,而不是后面没有/的/。
内容的提问来源于stack exchange,提问作者c0D3l0g1c
相关产品推荐
相关产品推荐

