如何使用re.split()函数在所有特殊字符处分割字符串?

6

我正在尝试使用re.split()函数从import re包中分割任何特殊字符。到目前为止,这是我所做的,但似乎还不太行。有什么想法吗?

word = [b for b in re.split(r'\`\-\=\~\!\@\#\$\%\^\&\*\(\)\_\+\[\]\{\}\;\'\\\:\"\|\<\,\.\/\>\<\>\?', a)]

5
你能描述一下你的具体问题吗?出了什么问题,样例输入和输出应该是怎样的?请提供详细信息。 - Jerry
3
“特殊字符”是什么?由此推断:什么是“普通”字符(相对于特殊字符而言)?是指非字母的吗?非字母数字的吗?在哪种语言环境中? - Dirk
定义特殊字符a - Bibhas Debnath
2
你尝试过像 re.split(r"[^\w\d\s]", s) 这样的方法吗?(问题:_\w 中)另外,为什么要用列表推导式? - tobias_k
3个回答

20

不必枚举所有“特殊”字符,创建一个字符类来指定不进行分割的字符可能更容易,并使用^字符来反转。

例如,re.split(r"[^\w\s]", s)将在任何不属于\w\s类(分别为[a-zA-Z0-9_][ \t\n\r\f\v],有关详细信息请参见此处)的字符处进行拆分。但是,请注意,_字符包含在\w类中,因此您可能希望明确指定所有“常规”字符,例如re.split(r"[^a-zA-Z0-9\s]", s)

>>> re.split(r"[^a-zA-Z0-9\s]", "foo bar_blub23/x~y'z")
['foo bar', 'blub23', 'x', 'y', 'z']

我喜欢这个,因为它有效地使用了内置的字符类。 - Keeler
1
如果你想要同时按空格进行分割呢?例如在给定的示例中,我想根据它们之间的空格将foo和bar拆分为两个字符串,那么我需要对给定的正则表达式进行哪些更改。 - Ghos3t

11

使用字符类:

re.split(r'[`\-=~!@#$%^&*()_+\[\]{};\'\\:"|<,./<>?]', a)

6

当您遇到一个不是字母或数字的字符时,您可能希望拆分字符串。为此,您可以在正则表达式中使用元字符\w表示"每个字母a-ZA-Z0-9",并使用^匹配相反的情况,如下所示:

>>> re.split(r'[^\w]', 'toto"t"o/t!')
['toto', 't', 'o', 't', '']

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