假设我有一个字符串,
"I want that one, it is great."
我想将此字符串拆分为
["I", "want", "that", "one", ",", "it", "is", "great", "."]
将",.:;"
等特殊字符以及可能的其他字符视为单独的字词。
使用Python 2.7有没有简单的方法呢?
对于"I don't."
等示例,它应为["I", "don", "'", "t", "."]
。理想情况下,它可以与非英语标点符号一起使用,例如؛
和其他标点符号。
答案 0 :(得分:1)
有关类似问题,请参阅here。答案也适用于你:
import re
print re.split('(\W)', "I want that one, it is great.")
print re.split('(\W)', "I don't.")
您可以使用过滤器删除re.split
返回的空格和空字符串:
s = "I want that one, it is great."
print filter(lambda _: _ not in [' ', ''], re.split('(\W)', s))
答案 1 :(得分:1)
您可以使用Regex和简单的列表解析来执行此操作。正则表达式将拉出单词并分隔标点符号,列表理解将删除空格。
import re
s = "I want that one, it is great. Don't do it."
new_s = [c.strip() for c in re.split('(\W+)', s) if c.strip() != '']
print new_s
new_s
的输出将为:
['I', 'want', 'that', 'one', ',', 'it', 'is', 'great', '.', 'Don', "'", 't', 'do', 'it', '.']
答案 2 :(得分:1)
In [70]: re.findall(r"[^,.:;' ]+|[,.:;']", "I want that one, it is great.")
Out[70]: ['I', 'want', 'that', 'one', ',', 'it', 'is', 'great', '.']
In [76]: re.findall(r"[^,.:;' ]+|[,.:;']", "I don't.")
Out[76]: ['I', 'don', "'", 't', '.']
正则表达式[^,.:;' ]+|[,.:;']
匹配(除,
,.
,:
,;
,'
之外的1个或多个字符或文字空间),或(文字字符,
,.
,:
,;
或'
)。
或者,使用regex module,您可以使用[:punct:]
字符类轻松扩展此内容以包含所有punctuation and symbols:
In [77]: import regex
在Python2中:
In [4]: regex.findall(ur"[^[:punct:] ]+|[[:punct:]]", u"""A \N{ARABIC SEMICOLON} B""")
Out[4]: [u'A', u'\u061b', u'B']
In [6]: regex.findall(ur"[^[:punct:] ]+|[[:punct:]]", u"""He said, "I don't!" """)
Out[6]: [u'He', u'said', u',', u'"', u'I', u'don', u"'", u't', u'!', u'"']
在Python3中:
In [105]: regex.findall(r"[^[:punct:] ]+|[[:punct:]]", """A \N{ARABIC SEMICOLON} B""")
Out[105]: ['A', '؛', 'B']
In [83]: regex.findall(r"[^[:punct:] ]+|[[:punct:]]", """He said, "I don't!" """)
Out[83]: ['He', 'said', ',', '"', 'I', 'don', "'", 't', '!', '"']
请注意,如果您希望unicode
匹配unicode标点符号或符号,请将regex.findall
作为第二个参数传递给[:punct:]
。
在Python2中:
import regex
print(regex.findall(r"[^[:punct:] ]+|[[:punct:]]", 'help؛'))
print(regex.findall(ur"[^[:punct:] ]+|[[:punct:]]", u'help؛'))
打印
['help\xd8\x9b']
[u'help', u'\u061b']
答案 3 :(得分:0)
我不知道任何可以执行此操作的函数,但您可以使用for循环。
这样的事情: word =“” wordLength = 0 对于范围内的i(0,len(stringName)): if stringName [i]!=“”: for x in range((i-wordLength),i): word + = stringName [i] wordLength = 0 list.append(字) word =“” 其他: worldLength =字长+ 1 希望这有效...对不起,如果这不是最好的方式