在 Python 中将单词/数字与符号分开

Posted

技术标签:

【中文标题】在 Python 中将单词/数字与符号分开【英文标题】:Seperate words/numbers from symbols in 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 【参考方案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 我怎样才能分组并且仍然将它们放在拆分列表中?

以上是关于在 Python 中将单词/数字与符号分开的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python中将具有名称(1个或多个单词)和数字的单行输入字符串拆分为[“名称”,“数字”]?

在 SQL 中将数字转换为单词 [重复]

如何在java中将数字转换为泰语单词

正则表达式的与B总结

在 ruby​​ 中将数字转换为单词 - 改进我的递归解决方案

从字符串 C++ 中读取单词,同时忽略空格、数字和符号。