Python re 匹配中文数字混合字符串 掉坑了 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Northxw
V2EX    程序员

Python re 匹配中文数字混合字符串 掉坑了

  •  
  •   Northxw 2019-03-15 08:44:06 +08:00 4272 次点击
    这是一个创建于 2484 天前的主题,其中的信息可能已经有所发展或是发生改变。

    要匹配的字符串,例如:‘请激活您的集思网账户 发件人 :OpinionWorld 集思网 时间:2019 年 3 月 9 日 19:57 (星期六)’

    要求:匹配 "请激活您的集思网账户", "OpinionWorld 集思网", "2019 年 3 月 9 日 19:57 (星期六)" 这三处有效信息,但是测试屡败,以前也没想过匹配中文....

    那,这个正则表达式该怎么写啊,虚心求教 T_T !

    24 条回复    2019-03-15 11:37:10 +08:00
    krixaar
        1
    krixaar  
       2019-03-15 08:54:35 +08:00
    如果“发件人:”和“时间:”是固定存在的,直接按这俩匹配出三个.+就行了吧……
    Northxw
        2
    Northxw  
    OP
       2019-03-15 08:57:31 +08:00
    @krixaar 貌似不行的,我用最基本的.*?, .*也是获取不到
    ctro15547
        3
    ctro15547  
       2019-03-15 08:58:44 +08:00
    如果只是固定的这一句话,用空格做分隔符,列表再切一下,拼起来不就完事了。。
    delectate
        4
    delectate  
       2019-03-15 08:59:43 +08:00
    >>> str
    '请激活您的集思网账户 发件人 :OpinionWorld 集思网 时间:2019 年 3 月 9 日 19:57 (星期六)'
    >>> re.findall(r'(.*?) 发件人 :(.*?) 时间:(.*?$)', str)
    [('请激活您的集思网账户', 'OpinionWorld 集思网', '2019 年 3 月 9 日 19:57 (星期六)')]
    Northxw
        5
    Northxw  
    OP
       2019-03-15 09:00:40 +08:00
    @ctro15547 没错,split 大法好。但是我初衷是拿 re 匹配,既然遇到这个问题了,就想解决一下啊 T_T
    CloudMx
        6
    CloudMx  
       2019-03-15 09:02:06 +08:00
    \u8bf7\u6fc0\u6d3b\u60a8[^。]+
    CloudMx
        7
    CloudMx  
       2019-03-15 09:02:35 +08:00
    @CloudMx 如果是这样结尾:请激活您的集思网账户 发件人 :OpinionWorld 集思网 时间:2019 年 3 月 9 日 19:57 (星期六)。
    firejoke
        8
    firejoke  
       2019-03-15 09:03:07 +08:00
    @Northxw py2 吗?改一下被匹配对象的编码试试
    Northxw
        9
    Northxw  
    OP
       2019-03-15 09:03:57 +08:00
    @delectate 兄 dei, 可以的啊。为什么添加 r 就可以匹配到了呢? 求解答
    Northxw
        10
    Northxw  
    OP
       2019-03-15 09:06:11 +08:00
    @firejoke py3, 不是编码,但是有看到别人全部转换成 unicode 去匹配,我没有尝试
    Northxw
        11
    Northxw  
    OP
       2019-03-15 09:07:14 +08:00
    @CloudMx 谢谢你啦,就单纯匹配上面我的要求信息。
    imlinhanchao
        12
    imlinhanchao  
       2019-03-15 09:07:28 +08:00
    @Northxw 如果你的 str 是 unicode 格式,那麽你的正要加上 u:ur'(.*?) 发件人 :(.*?) 时间:(.*?$)'
    Northxw
        13
    Northxw  
    OP
       2019-03-15 09:08:28 +08:00
    @imlinhanchao 不是 Unicode, 单纯中文字符,网页上一般是 UTF8。
    CloudMx
        14
    ClouMx  
       2019-03-15 09:12:06 +08:00
    \u8bf7\u6fc0\u6d3b\u60a8(.)+\)
    weixuan
        15
    weixuan  
       2019-03-15 09:24:51 +08:00
    4L 给出了答案,不用 r 前缀他的表达式也可以解决你的这个问题,你给的字符串没有涉及到转义的,使用 r 前缀就不用考虑转义的问题,因为 Python 的字符串本身也用\转义。比如 'ABC\\-001' ,对应的正则表达式字符串是'ABC\-001',使用 r'ABC\-001',对应的正则表达式字符串就是'ABC\-001'不变。
    CloudMx
        16
    CloudMx  
       2019-03-15 09:26:43 +08:00
    请激活.+\) Python2 HTML-->UTF-8
    Northxw
        17
    Northxw  
    OP
       2019-03-15 09:38:45 +08:00
    @weixuan 谢谢啦
    Northxw
        18
    Northxw  
    OP
       2019-03-15 09:38:56 +08:00
    @CloudMx ???
    metamask
        19
    metamask  
       2019-03-15 09:49:46 +08:00
    .*(?=\s 发件人)|(?<=发件人\s(:|:)).*(?=\s 时间)|(?<=时间(:|:)).*

    不过需要看具体文本再看怎么写,可能前面还附带东西或者后面

    习惯写大概这样
    compiles = [
    .*(?=\s 发件人)
    (?<=发件人\s(:|:)).*(?=\s 时间)
    (?<=时间(:|:)).*
    ]

    compiles = "|".join(compiles)
    CloudMx
        20
    CloudMx  
       2019-03-15 09:49:48 +08:00
    @Northxw 没啥。正则:请激活.+\),使用 PY2,HTML 编码为 UTF-8,测试通过。。
    delectate
        21
    delectate  
       2019-03-15 09:55:28 +08:00
    @freakxx 这个地方用断言,大材小用了。
    TimePPT
        22
    TimePPT  
    PRO
       2019-03-15 10:10:21 +08:00 via iPhone
    要是这玩意本身就是邮件,建议直接读邮件头
    Northxw
        23
    Northxw  
    OP
       2019-03-15 11:31:44 +08:00   1
    @freakxx 断言是啥我都不知道,但是谢谢你

    @TimePPT 这玩意本身就不是邮件,哈哈,是邮件的节点的属性值。

    @CloudMx OKK, 我用的 py3, 不过还是谢谢你
    TimePPT
        24
    TimePPT  
    PRO
       2019-03-15 11:37:10 +08:00 via iPhone
    @Northxw 了解……
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     795 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 20:24 PVG 04:24 LAX 12:24 JFK 15:24
    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