如何批量将文本中的中文大写数字替换为阿拉伯数字? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lalacat2i
V2EX    问与答

如何批量将文本中的中文大写数字替换为阿拉伯数字?

  •  
  •   lalacat2i 2021-07-27 22:04:42 +08:00 2922 次点击
    这是一个创建于 1553 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大家好,我是小白,不懂技术,一般遇到问题靠谷歌。但是这个问题不知如何是好。

    最近在看民法典的法条,为了阅读的舒适,希望把大写数字替换为阿拉伯数字,比如第一千一百四十一条替换为第 1141 条。请问大家有什么简单易行的方法吗?
    第 1 条附言    2021-07-28 20:10:27 +08:00
    • 经指正,我的标题应修改为

    如何批量将文本中的中文数字替换为阿拉伯数字?

    • 感谢大家提供的帮助
    17 条回复    2021-08-22 01:23:08 +08:00
    lalacat2i
        1
    lalacat2i  
    OP
       2021-07-27 22:06:00 +08:00
    抱歉,描述错误,应该是替换为阿拉伯数字。
    zxCoder
        2
    zxCoder  
       2021-07-27 23:01:29 +08:00
    数字的位数不会很多,都是有固定的书写格式的吧,感觉 if else 就可以
    luman
        3
    luman  
       2021-07-27 23:07:15 +08:00   1
    正则应该可以搞定。但我不会正则
    nuistzhou
        4
    nuistzhou  
       2021-07-27 23:47:01 +08:00 via iPhone
    针对每个长度的大写数字写正则好了
    0d
        5
    0d  
       2021-07-28 01:42:14 +08:00 via Android
    TuYanzheng
        6
    TuYanzheng  
       2021-07-28 02:12:22 +08:00 via Android
    @zxCoder 证明:一切数字都可以用不超过二十个汉字表示
    反证:假设存在集合 A 表示不能用二十个以内汉字表示的数,则取最小的数 a,可以表示为“最小的不能用二十个以内汉字表示的数”,与集合描述相反 以,一切数字都可以用二十个以内汉字表示。
    LiYanHong
        7
    LiYanHong  
       2021-07-28 08:54:06 +08:00
    不会编程的话,总共就十个字,查找替换都比你提个问快
    SevnChen
        8
    SevnChen  
       2021-07-28 09:06:37 +08:00
    https://github.com/silencesmile/money_to_word/blob/master/money_to_word.py

    给一个示例,主要是还要考虑个十百千万这种表示位的
    SevnChen
        9
    SevnChen  
       2021-07-28 09:08:32 +08:00
    @LiYanHong 虽说不难,但也不是替换 10 个字就能解决的问题。
    对比一下“一千一百四十一”和“一千一百四十”
    shakoon
        10
    shakoon  
       2021-07-28 09:19:33 +08:00
    楼主你说的这种字符是中文数字,不是中文大写数字。贰仟伍佰壹拾这种才是中文大写。
    emonc
        11
    emonc  
       2021-07-28 09:19:48 +08:00
    正则走两遍,先把单位去掉,再把汉字换成阿拉伯数字。应该就能解决大部分情况
    l9rw
        12
    l9rw  
       2021-07-28 09:49:05 +08:00   1
    不会编程的话可以用 word 。
    先 ctrl + H 打开替换窗口,点更多,勾选 [使用通配符] ,然后查找框里输入"第[零一二三四五六七八九十百千万]{1,10}条",不带引号,替换为里面留空,点最下面格式,随便选一个特殊格式。
    选中自定义格式的 [第一条] ,点开始->选择->选择格式相似的文本,选中以后点开始->定义新编号格式->确定就好了
    Maboroshii
        13
    Maboroshii  
       2021-07-28 09:56:33 +08:00   1
    要不反向思维试一下?
    先做一个把阿拉伯数字翻译成汉字的方法,1001 -> 一千零一 , 这个应该好实现吧?
    然后提前把 0 ~ 9999999 全部翻译好,最后反查替换。
    lalacat2i
        15
    lalacat2i  
    OP
       2021-07-28 20:07:15 +08:00
    @zjj19950716 感谢,看上去是我不会描述问题才不会搜索信息

    @l9rw 感谢,我稍后尝试一下

    @shakoon 感谢你的指正

    @SevnChen 多谢提供范例

    @tinytoadd 感谢提供思路
    MiketsuSmasher
        16
    MiketsuSmasher  
       2021-07-31 00:14:21 +08:00
    可以考虑一下这个项目,https://github.com/Ailln/cn2an
    用这个批量生成所有出现过的数字,然后再批量替换
    lalacat2i
        17
    lalacat2i  
    OP
       2021-08-22 01:23:08 +08:00
    @MiketsuSmasher 感谢,最近没上才看到你的建议
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     952 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 20:21 PVG 04:21 LAX 13:21 JFK 16:21
    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