将字符串拆分为列表,但保留符号

时间:2020-04-13 14:10:37

标签: python regex string

我想将单词分成字符串,但也要分开保留符号。

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']

如您所见,空格留在那里。我该如何解决?

5 个答案:

答案 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 Demo

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测试该解决方案表明,它几乎与最受欢迎的答案一样快

相关问题