如何使用re.split对逗号和句号进行分割?

4

我有多个字符串,其中单词用逗号或句号分隔:

string = ['apple,pear,grapes,carrot.cabbage,veggies.fruit,yard']

我想根据逗号和句号拆分这段内容:
string = ['apple','pear','grapes','carrot','cabbage','veggies','fruit','yard']

我只知道如何使用一个条件来进行re.split:

re.split(',',string)

这不会将有句点的单词分开。我该如何拆分整个字符串,以便在其中有逗号或句号时分开单词?


1
分割参数是一个正则表达式;使用 r"[.,]" - jtbandes
3个回答

9
>>> import re
>>> string = 'apple,pear,grapes,carrot.cabbage,veggies.fruit,yard'
>>> re.split(',|\.',string)
['apple', 'pear', 'grapes', 'carrot', 'cabbage', 'veggies', 'fruit', 'yard']

这个代码使用选择运算符|,在,.(必须转义为\.)处进行拆分。
也可以使用字符类来编写:
>>> re.split('[,.]',string)
['apple', 'pear', 'grapes', 'carrot', 'cabbage', 'veggies', 'fruit', 'yard']

但这不太普遍,因为任何一个字符都不能被替换成短语。

你也可以使用字符类。 - OneCricketeer
[,.] 中,您不必转义点号。对于单个字符的选择,方括号是首选选项。 - volcano

1
import re
string = 'apple,pear,grapes,carrot.cabbage,veggies.fruit,yard'
arr = re.split('[,.]', string)
print(arr)

在字符类中,你不需要转义句点。 - OneCricketeer

0
你可以使用 itertools 模块中的 chain.from_iterable 来处理列表,如果你的字符串变量中有许多元素。
from itertools import chain

string = ['apple,pear,grapes,carrot.cabbage,veggies.fruit,yard']
final = list(chain.from_iterable(re.split(',', k) for k in string))
print(final)

输出:

['apple', 'pear', 'grapes', 'carrot.cabbage', 'veggies.fruit', 'yard']

你可以只更改 re.split() 内的模式,以在 ',''.' 之间进行分割:

from itertools import chain

string = ['apple,pear,grapes,carrot.cabbage,veggies.fruit,yard']
final = list(chain.from_iterable(re.split('[,.]', k) for k in string))
print(final)

输出:

['apple', 'pear', 'grapes', 'carrot', 'cabbage', 'veggies', 'fruit', 'yard']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接