You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#正则表达式Regex无法提取URL:Regexr验证正常但代码无匹配

问题

在自动化测试中,我尝试用正则表达式从字符串里提取URL,这个正则在在线工具里能正常匹配,但在C#代码里却返回空字符串。待提取的URL有两个特征:

  • 始终以https://开头
  • 以\r结尾(后续会移除)

我的C#代码示例如下:

string html = text;
string pattern = @"https:\/\/(.+?)\\r";
Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
Match urlMatch = r.Match(html);
string url = urlMatch.Value;

请问适用于.NET的这个正则模式存在什么问题?

解答

问题核心出在正则里的\\r解析逻辑上:

  • 在C#的逐字字符串(以@开头的字符串)中,\\会被解析成单个反斜杠,所以你的正则模式实际是匹配https://后接任意字符,再加上字面量回车符\r。但如果你的目标字符串里的结尾是字符串形式的\r(即两个字符:反斜杠+字母r),那这个正则就匹配不上;反之,如果目标字符串里是实际的回车符(单个\r字符),那在线工具里你写的\\r是匹配字符串\r,和C#里的逻辑完全不一致,这就是两边结果不同的原因。

分两种场景修正:

  1. 目标URL结尾是实际回车符(单个\r字符)
    把正则模式改成@"https://(.+?)\r"即可——逐字字符串里\r直接代表回车符,不需要额外转义。修正后的代码:

    string html = text;
    string pattern = @"https://(.+?)\r";
    Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
    Match urlMatch = r.Match(html);
    string url = urlMatch.Value;
    // 后续移除结尾的回车符可以用 url.TrimEnd('\r')
    
  2. 目标URL结尾是字符串形式的\r(反斜杠+r两个字符)
    这种情况下你写的@"https://(.+?)\\r"是正确的,但要确认C#里的目标字符串text和在线工具里的测试内容完全一致——大概率是你C#中的text里的结尾是实际回车符,而在线工具里用的是字符串\r,才导致两边结果不同。

另外补充:(.+?)是非贪婪匹配,适合提取最短的URL;如果想更精准,避免匹配到不必要的内容,可以把(.+?)换成[^\r]+(针对实际回车符场景)或[^\\r]+(针对字符串\r场景),这样只会匹配到\r之前的所有非目标结尾字符。

内容的提问来源于stack exchange,提问作者Noob_Number_1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:25:14