C#正则表达式(方括号)使用问题求助
解决C#正则提取HTML文本时的方括号使用问题
嘿,我来帮你捋清楚这个问题——你遇到的其实不是方括号本身的问题,而是C#的字符串转义规则导致正则表达式没被正确解析。
问题出在哪?
在regex101里写正则时,你不用考虑编程语言的字符串转义,但在C#里就不一样了:如果你直接写"right;">[0-9]+",编译器会把中间的双引号当成字符串的结束标记,要么直接报语法错误,要么正则被截断成right;,自然匹配不到目标内容。
两种正确的写法,任你选
1. 给双引号加转义符
把正则里的双引号用\"转义,让C#知道这是正则的一部分,不是字符串边界:
string regexPattern = "\"right;\">[0-9]+"; Match matchResult = Regex.Match(yourHtmlString, regexPattern); if (matchResult.Success) { string fullMatch = matchResult.Value; // 得到 "right;">672" }
2. 用逐字字符串(更推荐)
在字符串前面加@,C#就会忽略所有转义规则,直接把你写的内容当作正则表达式,和你在regex101里写的格式完全一致:
string regexPattern = @"right;">[0-9]+"; Match matchResult = Regex.Match(yourHtmlString, regexPattern); if (matchResult.Success) { // 处理匹配到的内容 }
额外小技巧:直接提取数字
如果你最终要的是672而不是整个right;">672,可以给数字部分加个捕获组,直接拿到目标值:
string regexPattern = @"right;">([0-9]+)"; Match matchResult = Regex.Match(yourHtmlString, regexPattern); if (matchResult.Success) { string number = matchResult.Groups[1].Value; // 直接得到 "672" }
最后提个醒
正则对付简单HTML还行,但如果HTML结构变复杂(比如标签里多了空格、属性顺序变了),用专门的HTML解析库会靠谱得多,毕竟正则不是为解析HTML设计的~
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

