为什么?大文件超过 50m,编辑器正则替换很慢,代码直接处理很快 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
soap0X
V2EX    问与答

为什么?大文件超过 50m,编辑器正则替换很慢,代码直接处理很快

  •  1
     
  •   soap0X 225 天前 via Android 1766 次点击
    这是一个创建于 225 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言    224 天前
    补充下:

    1.文件大小 104M

    2.17w 行 sql (我开始替换的是'

    3.试过两个 notepad--和 uedit64

    3.最后用 AI 写两个 py 的工具类
    第 2 条附言    224 天前
    刚试了下 vscode 确实也很快。我用的编辑器问题吧
    5 条回复    2025-05-19 09:27:30 +08:00
    agagega
        1
    agagega  
       225 天前
    你没说是什么编辑器,也没说你的代码是怎么替换的。

    一种可能是编辑器正则是 NFA ,也没考虑各种优化,刚好遇到文件里有大量回溯的情况。也有可能是编辑器渲染效率不行,替换后需要全部重绘,会卡很久。50M 这个级别,通常来说 Vim 和 Emacs 都没问题,VSCode 也不会有问题
    geelaw
        2
    geelaw  
       224 天前
    有很多可能的原因,比如编辑器打开文件时,替换的内容永远是正在编辑的版本,而不是磁盘上的版本,而多数文本编辑器会使用特别的数据结构存储打开的文档(按行断开、使用 rope 等等),相比磁盘上的文件被程序一口气读完、替换完、写完,编辑器内替换需要重新把数据结构转换为适合被正则表达式匹配的样子(替换完后再重新变成适合用来编辑的数据结构),或者使用针对该结构的匹配算法,然后还需要重新渲染等等。

    当然, @agagega #1 指出的问题最明显,因为观众不可能有读心术~

    另 Re: #1
    NFA 是抽象模型,和怎么实现没有必然联系,而且 NFA 最自然的实现也不用回溯。现代软件里的正则表达式也不是计算理论意义下的正则表达式,表达力强于 NFA 。
    Zaden
        3
    Zaden  
       224 天前
    有个重要原因是编辑器需要在内存中保存撤销记录,代码只要考虑顺序读写就行了
    flynaj
        4
    flynaj  
       224 天前 via Android
    这个快慢就是 GUI 程序的所见即所得决定的,内容每次改变都要刷新显示。所以就慢了,当然 50 兆这种大小现代编辑器都是秒完成的,我经常使用的是 emeditor
    alexsz
        5
    alexsz  
       224 天前
    用 sed 命令啊
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     933 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 22:47 PVG 06:47 LAX 14:47 JFK 17:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86