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

.NET正则表达式中$限定符的异常行为咨询

为什么你的$限定符没按预期工作?

咱们先把核心误解点说清楚:RegexOptions.Multiline模式下的$,只认换行符(\n)界定的行尾,不是你以为的空格、连字符分隔的"内容末尾"。

你的输入字符串是:

var text = @"_ abc 123 do-re-me";

这里面没有任何\n换行符,所以整个字符串就是实打实的"一行"——Multiline模式根本没机会发挥作用,$自然只会匹配整个字符串的最后位置,也就是你看到的"me"。

验证:加个换行符就符合预期了

要是把文本改成每行一个内容:

var text = @"_
abc
123
do-re-me";

再跑你原来的代码(带着RegexOptions.Multiline),你就能得到预期的结果:

0. _
1. abc
2. 123
3. me

这时候Multiline模式才真正生效,$匹配了每个\n之前的行尾位置。

你混淆了"行尾"的定义

你之前误以为空格、连字符分隔的部分是"行",但Multiline模式里的"行"是严格靠换行符划分的,这是最关键的误解。

至于你说的行为符合预期,应该是你之前测试的时候用了带换行的字符串,所以^匹配了每行开头——这完全符合Multiline模式的设计逻辑。

要是想匹配非换行分隔的"单词末尾"

如果你的实际需求是抓出被空格、连字符这类符号分隔的每个单词,那别用$了,改用**单词边界\b**更合适,比如把正则改成:

var pat = @"\w+\b";
var re = new Regex(pat); // 根本不需要Multiline模式

这样就能匹配到_、abc、123、do、re、me。如果只想抓每个分隔块的最后一个单词(比如do-re-me里的me),可以再调整正则逻辑,比如用(?<=[\s-])\w+$这类环视规则,具体看你实际要处理的文本格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:29:39