V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lalacat2i
V2EX  ›  问与答

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

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

    最近在看民法典的法条,为了阅读的舒适,希望把大写数字替换为阿拉伯数字,比如第一千一百四十一条替换为第 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 就可以
    sunjiayao
        3
    sunjiayao  
       2021-07-27 23:07:15 +08:00   ❤️ 1
    正则应该可以搞定。但我不会正则
    nuistzhou
        4
    nuistzhou  
       2021-07-27 23:47:01 +08:00 via iPhone
    针对每个长度的大写数字写正则好了
    tinytoadd
        5
    tinytoadd  
       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   ·   我们的愿景   ·   实用小工具   ·   5756 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 06:12 · PVG 14:12 · LAX 23:12 · JFK 02:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.