我想将单词分成字符串,但也要分开保留符号。
s = "Hello world. This-is-foo! I love you"
输出应为
out: ["Hello", "world", ".", "This", "-", "is", "-", "foo", "!", "I", "love", "you"]
我尝试过:
re.split('(\W)', s)
但这是输出:
['Hello',
' ',
'world',
'.',
'',
' ',
'This',
'-',
'is',
'-',
'foo',
'!',
'',
' ',
'I',
' ',
'love',
' ',
'you']
如您所见,空格留在那里。我该如何解决?
答案 0 :(得分:3)
您可以将此正则表达式与findall
中的python
一起使用:
>>> s = "Hello world. This-is-foo! I love you"
>>> print ( re.findall( r'\w+|[^\s\w]+', s) )
['Hello', 'world', '.', 'This', '-', 'is', '-', 'foo', '!', 'I', 'love', 'you']
RegEx详细信息:
\w+
:匹配1个或更多单词字符|
:或[^\s\w]+
;匹配1个或多个非单词和非空格字符答案 1 :(得分:2)
此正则表达式应该起作用:
re.findall(r'\w+|\S', s)
这表示单词和无空格字符。
代码:
import re
s = "Hello world. This-is-foo! I love you"
print(re.findall(r"\w+|[^\w\s]+", s))
输出:
['Hello', 'world', '.', 'This', '-', 'is', '-', 'foo', '!', 'I', 'love', 'you']
答案 2 :(得分:1)
您可以匹配单词\w+
或非单词\W+
(注意大写):
import re
s = "Hello world. This-is-foo! I love you"
print(re.findall(r"\w+|\W+", s))
您得到:
['Hello', ' ', 'world', '. ', 'This', '-', 'is', '-', 'foo', '! ', 'I', ' ', 'love', ' ', 'you']
编辑
如果要避免空格,可以执行以下操作:
import re
s = "Hello world. This-is-foo! I love you"
print(re.findall(r"\w+|[^\w\s]+", s))
您得到:
['Hello', 'world', '.', 'This', '-', 'is', '-', 'foo', '!', 'I', 'love', 'you']
答案 3 :(得分:1)
所有单词和无空格字符
re.findall(r'\w+|\S', s)
答案 4 :(得分:0)
之后,您可以使用列表理解来过滤空格。
s = [x for x in re.split('(\W)', s) if x != " "]
用%% timeit magic测试该解决方案表明,它几乎与最受欢迎的答案一样快