如何用正则表达式提取指定字符串中/与\之间的GetData?
解决正则提取GetData的问题
咱们一步步来排查和解决你的问题:
首先说说你第一次写的正则"\\/\\w*\\"为什么报错——在C#的普通字符串里,\是转义字符,所以你最后那个\其实没有被正确转义成正则能识别的字面量\。最终传递给Regex的模式是/\w*\,末尾的\属于非法的未转义字符,自然就抛出了ArgumentException。
然后是你第二次尝试的@"/\w*\\",这个正则的逻辑是匹配/ + 任意数量单词字符 + \,但你的目标字符串结构是.../IService1/GetData\,这里的/有两个,而\w不包含/,所以这个正则会在第一个/后面匹配到IService1就停下来,后面遇到下一个/就不满足\w的匹配规则了,自然找不到你要的GetData。
正确的正则写法
我们需要精准匹配最后一个/之后、末尾\之前的内容,推荐两种写法:
写法1:针对单词字符的精准匹配
如果确定目标内容只有字母数字下划线(也就是\w覆盖的范围),可以用这个:
Regex regex = new Regex(@"\/(\w+)\\$");
@符号让我们不用额外转义字符串里的\,写正则更省心\/匹配字面量/(\w+)用捕获组捕获一个或多个单词字符(用+而不是*,避免匹配空内容)\\匹配末尾的\$锚定到字符串结尾,确保我们抓的是最后一段内容
写法2:更通用的匹配(支持非单词字符)
如果以后目标内容可能包含\w以外的字符,比如Get-Data这种带连字符的,就用这个:
Regex regex = new Regex(@"\/([^\\]+)\\$");
[^\\]+表示匹配除了\之外的任意一个或多个字符,适用性更广
完整代码示例
string input = @"http://tempuri.org/IService1/GetData\"; Regex regex = new Regex(@"\/(\w+)\\$"); Match match = regex.Match(input); if (match.Success) { string target = match.Groups[1].Value; Console.WriteLine(target); // 输出:GetData }
内容的提问来源于stack exchange,提问作者DooDoo
相关产品推荐
相关产品推荐

