如何修改正则表达式,提取引号内内容时不包含外层引号?
问题原因
你写的正则里已经用()定义了捕获组,匹配到的内容中,整个匹配结果(Value属性)会包含两端的引号,你需要的不带引号的内容实际存储在序号为1的捕获组里。
解决方法
方法1:不修改正则,调整取值逻辑
直接取捕获组1的内容即可,修改后代码如下:
Regex p = new Regex("\"([^\"]+)\""); string dirs = p.Match(link).Groups[1].Value;
方法2:调整正则,直接匹配不带引号的内容
使用零宽断言限定匹配位置前后是双引号,最终匹配结果本身就不包含引号,修改后代码如下:
Regex p = new Regex(@"(?<="")[^""]+(?="")"); string dirs = p.Match(link).Value;
该正则里(?<=")表示匹配位置的前方必须是双引号,(?=")表示匹配位置的后方必须是双引号,两个断言都不会计入最终的匹配结果。
内容的提问来源于stack exchange,提问作者rgdgd rhdj
相关产品推荐
相关产品推荐

