如何用gsub实现模式重叠匹配?替换数字间x周边空格遇异常
问题解答
你的判断完全正确——原代码只替换第一个x的核心原因就是正则匹配的非重叠特性:当第一次匹配3 x 4时,最后一个捕获组对应的数字4已经被纳入当前匹配范围,匹配结束后,下一次匹配会从4之后的位置开始,自然无法再识别4 x 90这个部分,因为开头的4已经被"消耗"了,不会被重复用于下一次匹配。
要解决这个问题,不用把前后的数字纳入匹配范围,直接针对x周围的空格做全局替换即可:
s = s:gsub('%s*x%s*', '\u{2009}x\u{2009}')
这个代码会把所有x周围的任意数量空格(包括零个)替换为你需要的不换行空格,完全适配你给出的两种输入格式。
内容的提问来源于stack exchange,提问作者Rudi
相关产品推荐
相关产品推荐

