Python 如何重新移动字符串开头或结尾的非字母数字字符

Python 如何重新移动字符串开头或结尾的非字母数字字符,python,list,python-3.x,character,Python,List,Python 3.x,Character,我有一个列表,其中的元素在每个字符串的开头或结尾都有不必要的(非字母数字)字符 前 我想摆脱这一切-- 我试过: for i in thelist: newlist.append(i.strip('\W')) 那没用。任何建议。您可以使用正则表达式。该方法将采用三个参数: 正则表达式 替代品 弦 代码: import re s = 'cats--' output = re.sub("[^\\w]", "", s) print output 说明: import re s =

我有一个列表,其中的元素在每个字符串的开头或结尾都有不必要的(非字母数字)字符

我想摆脱这一切--

我试过:

for i in thelist:
    newlist.append(i.strip('\W'))

那没用。任何建议。

您可以使用正则表达式。该方法将采用三个参数:

  • 正则表达式
  • 替代品
代码:

import re

s = 'cats--'
output = re.sub("[^\\w]", "", s)

print output
说明:

import re

s = 'cats--'
output = re.sub("[^\\w]", "", s)

print output
  • 零件
    “\\w”
    与任何字母数字字符匹配
  • [^x]
    将匹配任何非
    x

通过使用剥离,您必须知道要剥离的子字符串

>>> 'cats--'.strip('-')
'cats'
您可以使用
re
删除非字母数字字符,但您可以使用鼠标上的加农炮进行射击。使用
str.isalpha()
可以测试任何字符串是否包含字母字符,因此您只需要保留这些字符:

>>> ''.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']
这一结果与re(截至)的结果完全相同:

但是,如果只想从字符串的末尾去除非字母数字字符,则应使用类似于此的另一种模式(选中):


我相信这是最短的非正则表达式解决方案:

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

要从两端删除除字母、数字和
\u
以外的一个或多个字符,您可以使用

re.sub(r'^\W+|\W+$', '', '??cats--') # => cats
或者,如果也要删除
\u
,则将
\W
包装到字符类中,并在其中添加
\u

re.sub(r'^[\W_]+|[\W_]+$', '', '_??cats--_')
请参阅和:

见:


你认为哪些角色是不必要的?请考虑通过点击来接受对你最有效的答案。✓ 在左边(见)和上投票(见)所有对你有用的答案。你能解释“[^ \W]”部分吗?不认为会起作用,因为我不能摆脱在字符串中间的不必要的字符,只有在开始或结束。完成,我希望这能有所帮助。除最后一个代码示例外,所有代码示例都无法仅删除前导/尾随的非字母数字字符。你可以告诉我,我已经意识到了这一点,但是我错过了那里的
str.isalnum()。谢谢分享你的正则表达式和答案。正则表达式图很棒!谢谢你能解释一下为什么使用OR(|)吗?编辑:nvm,它反映字符串的开始或结束。
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
re.sub(r'^\W+|\W+$', '', '??cats--') # => cats
re.sub(r'^[\W_]+|[\W_]+$', '', '_??cats--_')
import re
print( re.sub(r'^\W+|\W+$', '', '??cats--') )          # => cats
print( re.sub(r'^[\W_]+|[\W_]+$', '', '_??cats--_') )  # => cats