正则表达式 re.sub 替换不完整的问题现象及其根本原因 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
爱意满满的作品展示区。
itskingname

正则表达式 re.sub 替换不完整的问题现象及其根本原因

  •  
  •   itskingname Aug 28, 2018 2743 views
    This topic created in 2802 days ago, the information mentioned may be changed or developed.

    这是一个说隐蔽比较隐蔽,说弱智也比较弱智的坑。

    造成这个坑的原因有两点:

    • 多个默认参数不带参数名的时候,按顺序从左侧填写
    • 很多编程语言里面常量都会使用一个数字并赋值给一个大写变量来表示

    如果习惯看源代码或者官方文档,要解决这个问题不超过 2 分钟。而如果不看文档不看源代码,只知道去网上搜搜搜,那么要解决这个问题可能需要的时间会超过两小时。

    正则表达式 re.sub 替换不完整的问题现象及其根本原因

    14 replies    2018-08-28 11:45:12 +08:00
    delectate
        1
    delectate  
       Aug 28, 2018
    >>> import re
    >>> print(int(re.S))
    16

    学习了。
    imn1
        2
    imn1  
       Aug 28, 2018   1
    不读文档、手册怪谁呢?
    自己跳过一个参数,这个哪个语言都不行吧?基础知识

    flags 是整数,也是看手册就知道啊,默认参数 flags=0,不就明显是整数么?
    Leigg
        3
    Leigg  
       Aug 28, 2018 via iPhone   1
    。。。这个纯属于使用者粗心大意,我还以为是 re 库本身有问题呢,像这种 re.S/I/M,一般都是库内部使用 int 做的枚举值,类似的还有 pymongo.ASCENDING。
    itskingname
        4
    itskingname  
    OP
       Aug 28, 2018
    @Leigg 你和
    @imn1

    你们两人为什么都只看到了表象呢。这里正则表达式只是举个例子而已。

    我想强调的点是:

    多个默认参数不带参数名的时候,按顺序从左侧填写
    很多编程语言里面常量都会使用一个数字并赋值给一个大写变量来表示
    多个默认参数值的类型一样,使用的时候又不带参数名,可能会导致文章中类似的不容易发现的 bug。
    blodside
        5
    blodside  
       Aug 28, 2018 via Android
    我一般用三个以上参数的时候都是指定参数名的
    rrfeng
        6
    rrfeng  
       Aug 28, 2018 via Android
    我只说一句,这就是 Python 蠢的地方了啊!
    luyangk
        7
    luyangk  
       Aug 28, 2018
    在使用一个函数之前第一步不就是了解它的参数是什么吗。。。为什么这个步骤会放到了 debug 的时候。。。如果在知道函数有 5 个参数的情况下,只传了 4 个还没指定参数名,怎么想都会知道有问题吧
    imn1
        8
    imn1  
       Aug 28, 2018   1
    @itskingname
    是你只看到我说的「表象」

    我说的就是,你所强调的各点都是基础,连我这个不是程序员的人都懂的
    尤其读手册是基础中的基础
    使用任何函数、类、API 都该搞清楚输入格式和输出格式,怎能想当然呢
    itskingname
        9
    itskingname  
    OP
       Aug 28, 2018
    @imn1 唉,我觉得肯定是我这个例子没有举好
    noqwerty
        10
    noqwerty  
       Aug 28, 2018 via Android
    感觉这个不能怪库啊……传参数也要讲基本法吧
    whileFalse
        11
    whileFalse  
       Aug 28, 2018
    要怪罪到语言 /IDE 身上吗?
    lxy42
        12
    lxy42  
       Aug 28, 2018
    @itskingname #4
    > 多个默认参数不带参数名的时候,按顺序从左侧填写

    “按顺序从左赋参”难道不是很符合直觉的做法吗?

    > 很多编程语言里面常量都会使用一个数字并赋值给一个大写变量来表示

    用整数表示常量也是很普遍的做法啊。


    你这个明显就是不熟悉函数用法导致的错误,跟库本身一点关系都没有。
    lxy42
        13
    lxy42  
       Aug 28, 2018
    @rrfeng #6 请问蠢在哪里?
    itskingname
        14
    itskingname  
    OP
       Aug 28, 2018
    @lxy42 我都说了 re.sub 只是我举得一个例子。。。
    About     Help     Advertise     Blog     API     FAQ     Solana     872 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 46ms UTC 22:28 PVG 06:28 LAX 15:28 JFK 18:28
    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