V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
songdg
V2EX  ›  Python

如何分解字符串

  •  
  •   songdg · 2019-09-03 11:30:19 +08:00 · 2251 次点击
    这是一个创建于 1909 天前的主题,其中的信息可能已经有所发展或是发生改变。
    像' [生物质能] [新疆振兴] [页岩气] ' 如何分解成列表 ['生物质能', '新疆振兴', '页岩气'] 形式。
    13 条回复    2019-09-04 17:25:49 +08:00
    ipwx
        1
    ipwx  
       2019-09-03 11:45:53 +08:00 via Android   ❤️ 1
    re.findall(r'\[([^\]]+)\]', s)
    qqq8724
        2
    qqq8724  
       2019-09-03 11:48:28 +08:00   ❤️ 1
    先替换 ][ 为 ','
    替换 [ 为 ['
    再替换 ] 为 ']
    SuperMild
        3
    SuperMild  
       2019-09-03 12:04:08 +08:00   ❤️ 1
    我试了一下

    ' [生物质能] [新疆振兴] [生物质能] [新疆振兴] [页岩气] [页岩气] '.split('] [')

    结果是 [' [生物质能', '新疆振兴', '生物质能', '新疆振兴', '页岩气', '页岩气] ']

    你再对头尾的项目简单处理一下就行了。这个如果懂正则,用正则做最好,如果不懂正则,用我这个方法的好处是容易理解。
    princelai
        4
    princelai  
       2019-09-03 12:19:35 +08:00   ❤️ 1
    import re
    s = ' [生物质能] [新疆振兴] [页岩气] '
    re.findall("\[(.*?)\]",s)
    skyrem
        5
    skyrem  
       2019-09-03 13:00:39 +08:00
    numpy.flatten
    Dustyposa
        6
    Dustyposa  
       2019-09-03 13:35:58 +08:00   ❤️ 1
    import re
    s = ' [生物质能] [新疆振兴] [页岩气] '
    re.findall("\w+",s)
    dongxiao
        7
    dongxiao  
       2019-09-03 13:52:57 +08:00
    s.replace("]", "").replace("[", "").strip().split()
    Out[126]: ['生物质能', '新疆振兴', '页岩气']

    s
    Out[127]: ' [生物质能] [新疆振兴] [页岩气] '
    imdong
        8
    imdong  
       2019-09-03 14:21:41 +08:00
    ' [生物质能] [新疆振兴] [页岩气] '.trim(' []').split('] [')

    (function (match_string) {
    let result = match_string.match(/\[([^\]]+)\]/g);
    result.forEach(function (item, index) {
    result[index] = /\[([^\]]+)\]/.exec(item)[1]
    });
    return result;
    })(' [生物质能] [新疆振兴] [页岩气] ')
    snoopygao
        9
    snoopygao  
       2019-09-03 16:55:42 +08:00   ❤️ 1
    ' [生物质能] [新疆振兴] [页岩气] '.lstrip("'[").rstrip("]'").split('][')
    MMMMMMMMMMMMMMMM
        10
    MMMMMMMMMMMMMMMM  
       2019-09-04 01:46:14 +08:00
    [\u4E00-\u9FA5]*
    songdg
        11
    songdg  
    OP
       2019-09-04 10:27:15 +08:00
    @Dustyposa 这个办法好能应付多种情况,但有个问题,如果出现 [工业 4.0]就不能正确分解。
    songdg
        12
    songdg  
    OP
       2019-09-04 10:28:59 +08:00
    @snoopygao 我也是这种思路。
    ydeveloper
        13
    ydeveloper  
       2019-09-04 17:25:49 +08:00
    可以用正则式判断最近的"["和"]"之间的内容,拆分后然后再字符串,我不太懂 Python 的写法,不过正则的写法如下:
    (?<=\[).*?(?=\])
    不过这种情况不能判断出[123]]这种类型
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2676 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 03:37 · PVG 11:37 · LAX 19:37 · JFK 22:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.