【问题标题】:Seperate words/numbers from symbols in Python在 Python 中将单词/数字与符号分开
【发布时间】:2015-04-21 03:49:08
【问题描述】:

在python 2中,我想获取一个字符串,并将其存储在一个数组中,分隔符是从单词/数字到符号以及空格的变化,反之亦然。希望有一个功能可以做到这一点。示例:

"54 3 'hello world' 5+4"

会返回

["54", "3", "'hello world'", "5", "+", "4"] 

我使用re.findall(r"[\w']+", text) 来获取所有分隔的单词/数字的列表,但在整理符号时我被卡住了。

【问题讨论】:

  • 你有没有尝试过?
  • 没有内置函数来处理这种情况,你需要为你创建一个。你的意思是store 而不是sort
  • 我已经使用re.findall(r"[\w']+", Script) 来获取所有分隔的单词/数字的列表,但是在整理符号时我被卡住了。 @Bhargav Rao
  • @user15888 将其添加到您的问题中
  • 是的,我的意思是存储,现在编辑它。 @Anmol_uppal

标签: python regex


【解决方案1】:

您也许可以使用如下解决方法,但您没有指定所有可能的符号。

>>> import re
>>> s = "54 3 'hello world' 5+4"
>>> re.findall(r"('[^']*'|\w+|[^\w\s]+)", s)
['54', '3', "'hello world'", '5', '+', '4']

更严格的做法是:

>>> re.findall(r"('[^']*'|[a-z0-9]+|[^a-z0-9\s]+)", s, re.I)

【讨论】:

    【解决方案2】:
    import re
    x="""54 3 'hello world' 5+4"""
    print [x for x in re.split(r"[ ](?![^']*'(?:[^']*'[^']*')*[^']*$)|([+*-])",x) if x]
    

    你可以通过re module试试这个。

    【讨论】:

    • 希望我能接受多个答案,干得好!
    • @BhargavRao 直接在我的编译器上执行此操作。别担心它会起作用 :)
    • 我很抱歉哈哈,我几乎没有声誉,投票需要 15 个,当我有 15 个代表时我会重新访问并投票。
    • 你是 vks 吗?或者有其他人入侵了您的帐户!没有 DEMO,你的答案看起来太不完整了!哈哈。无论如何,我的支持:)
    • @BhargavRao 哇!!!!会调查那个模块!!!!!!!!! plythanx 很多 :) 你是个巫师 :)
    【解决方案3】:

    您可以使用以下模式进行拆分:

    >>> [i for i in re.split(r'(?<![a-zA-Z]) |([\+\-\*\\])',s) if i]
    ['54', '3', "'hello world'", '5', '+', '4']
    

    (?&lt;![a-zA-Z])negative look behind,根据前面没有任何单词字符的空格进行拆分!

    【讨论】:

    • 感谢您的回答,您的工作正常,但我只能接受一个。 :)
    • 在 15 次代表时重新访问 ;)
    • @BhargavRao 我希望!但是10点以后!我想我正在失去代表的倾向! ;)
    • 你实际上可以将你的`+-*`组合在一起
    • @vks 我怎样才能分组并且仍然将它们放在拆分列表中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    相关资源
    最近更新 更多