def strip_nonalnum(word):
if not word:
return word # nothing to strip
for start, c in enumerate(word):
if c.isalnum():
break
for end, c in enumerate(word[::-1]):
if c.isalnum():
break
return word[start:len(word) - end]
print([strip_nonalnum(s) for s in thelist])
或者
import re
def strip_nonalnum_re(word):
return re.sub(r"^\W+|\W+$", "", word)
text = "`23`12foo--=+"
while len(text) > 0 and not text[0].isalnum():
text = text[1:]
while len(text) > 0 and not text[-1].isalnum():
text = text[:-1]
print text
>>> ''.join(char for char in '#!cats-%' if char.isalpha())
'cats'
>>> thelist = ['cats5--', '#!cats-%', '--the#!cats-%', '--5cats-%', '--5!cats-%']
>>> [''.join(c for c in e if c.isalpha()) for e in thelist]
['cats', 'cats', 'thecats', 'cats', 'cats']
你想去掉非字母数字,这样我们就可以做得更好:
>>> [''.join(c for c in e if c.isalnum()) for e in thelist]
['cats5', 'cats', 'thecats', '5cats', '5cats']
5条答案
按热度按时间cetgtptt1#
或者
yptwkmov2#
要从两端删除除字母、数字和
_
以外的一个或多个字符,可以使用或者,如果也要删除
_
,则将\W
Package 到字符类中,并在其中添加_
:请参见regex demo和正则表达式图:
请参见Python demo:
osh3o9ms3#
可以使用正则表达式。方法
re.sub()
将接受三个参数:"\\w"
匹配任何字母数字字符。[^x]
将匹配 * 不是 *x
的任何字符pod7payv4#
我相信这是最短的非正则表达式解决方案:
5rgfhyps5#
使用strip时,你必须知道要剥离的子字符串。
你可以使用
re
来去掉非字母数字字符,但是你会在鼠标IMO上用大炮射击。使用str.isalpha()
你可以测试任何字符串是否包含字母字符,所以你只需要保留那些:你想去掉非字母数字,这样我们就可以做得更好:
这个结果与使用re得到的结果完全相同(从Christian's answer开始):
但是,如果您只想从字符串末尾去除非字母数字字符,则应使用另一种模式,如下面所示(选中re Documentation):