从单词的开头和结尾删除非字母字符

iom*_*tin 5 python regex

我需要从单词的开头和结尾删除所有非字母字符,但如果它们出现在两个字母之间,请保留它们.

例如:

'123foo456' --> 'foo'
'2foo1c#BAR' --> 'foo1c#BAR'
Run Code Online (Sandbox Code Playgroud)

我尝试过使用re.sub(),但我无法编写正则表达式.

Ken*_*ent 6

像这样?

re.sub('^[^a-zA-Z]*|[^a-zA-Z]*$','',s)
Run Code Online (Sandbox Code Playgroud)

s 是输入字符串.


unu*_*tbu 6

您可以使用str.strip:

In [1]: import string

In [4]: '123foo456'.strip(string.digits)
Out[4]: 'foo'

In [5]: '2foo1c#BAR'.strip(string.digits)
Out[5]: 'foo1c#BAR'
Run Code Online (Sandbox Code Playgroud)

正如马特在评论中指出的那样(谢谢,马特),这只会删除数字.要删除任何非字母字符,

用非字母定义你的意思:

In [22]: allchars = string.maketrans('', '')

In [23]: nonletter = allchars.translate(allchars, string.letters)
Run Code Online (Sandbox Code Playgroud)

然后剥离:

In [18]: '2foo1c#BAR'.strip(nonletter)
Out[18]: 'foo1c#BAR'
Run Code Online (Sandbox Code Playgroud)