如何用正则表达式删除Loadfile中指定行的2个þ分隔符?
解决Loadfile中删除指定分隔字符的正则方案
问题根因
你之前的正则失效,是因为它硬要找连续的两个þ,但如果行里的þ是分散开的,自然匹配不到。我们需要的是能处理任意位置þ的方案,同时精准锁定有48个þ的行。
实用正则方案
1. 快速移除任意两个þ(无需指定位置)
如果只是需要把48个þ减到46个,不管删哪两个,用这个Perl兼容的正则最省心:
s/(þ)/$1/46g
它会匹配所有þ,但只保留前46个,自动砍掉后面的2个。
2. 精准删除最后两个þ
如果要固定删除行内最后两个þ,用这个替换规则:
s/(^(?:[^þ]*þ){46})([^þ]*þ)([^þ]*þ)(.*)/$1$4/g
拆解逻辑:
(^(?:[^þ]*þ){46}):抓取前46个þ和它们前面的内容([^þ]*þ)([^þ]*þ):定位第47、48个þ(包括它们前面的非分隔符内容)(.*):抓取剩下的所有内容- 替换时只保留前46个
þ的部分和剩余内容,直接丢弃第47、48个þ
3. 先筛选目标行再处理
如果怕误改其他行,先匹配恰好有48个þ的行,再执行替换(适用于Perl、Vim等支持条件替换的工具):
/^(?:[^þ]*þ){48}$/ s/(þ)/$1/46g
验证目标行
先用这个正则确认哪些行是需要处理的:
^[^þ]*(þ[^þ]*){48}$
能匹配上的就是有且仅有48个þ的行,再用替换规则操作就稳了。
内容的提问来源于stack exchange,提问作者Dan Smith
相关产品推荐
相关产品推荐

