我正在尝试使用re.split()
函数从import re
包中分割任何特殊字符。到目前为止,这是我所做的,但似乎还不太行。有什么想法吗?
word = [b for b in re.split(r'\`\-\=\~\!\@\#\$\%\^\&\*\(\)\_\+\[\]\{\}\;\'\\\:\"\|\<\,\.\/\>\<\>\?', a)]
不必枚举所有“特殊”字符,创建一个字符类来指定不进行分割的字符可能更容易,并使用^
字符来反转。
例如,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']
使用字符类:
re.split(r'[`\-=~!@#$%^&*()_+\[\]{};\'\\:"|<,./<>?]', a)
当您遇到一个不是字母或数字的字符时,您可能希望拆分字符串。为此,您可以在正则表达式中使用元字符\w
表示"每个字母a-ZA-Z0-9",并使用^
匹配相反的情况,如下所示:
>>> re.split(r'[^\w]', 'toto"t"o/t!')
['toto', 't', 'o', 't', '']
a
。 - Bibhas Debnathre.split(r"[^\w\d\s]", s)
这样的方法吗?(问题:_
在\w
中)另外,为什么要用列表推导式? - tobias_k