Python 如何删除尾随的非字母字符

Python 如何删除尾随的非字母字符,python,regex,python-3.x,Python,Regex,Python 3.x,上述操作将删除所有alpha字符;我只想删除最后一个alpha(字母类型字符)之后的任何字符;或尾随最后一个字母字符 i、 e.Sarah Ruthers#6 要简单地输出: import re s = 'Sarah Ruthers#6' output = re.sub("[^\\w]", "", s) print output 上面是我的正则表达式;输出SarahRuthers(删除空格)\w是“单词字符”,其中包括字母数字(字母、数字)加下划线(\ux) 假设您只需要在结尾保留大写和小

上述操作将删除所有alpha字符;我只想删除最后一个alpha(字母类型字符)之后的任何字符;或尾随最后一个字母字符

i、 e.
Sarah Ruthers#6

要简单地输出:

import re

s = 'Sarah Ruthers#6'
output = re.sub("[^\\w]", "", s)

print output
上面是我的正则表达式;输出
SarahRuthers
(删除空格)

\w
是“单词字符”,其中包括字母数字(字母、数字)加下划线(\ux)

假设您只需要在结尾保留大写和小写字母:

Sarah Ruthers
\w
是“文字字符”,包括字母数字(字母、数字)加下划线(389;)

假设您只需要在结尾保留大写和小写字母:

Sarah Ruthers

在结尾锚定图案,并使用正确的字符类:

output = re.sub("[^a-zA-Z]+$", "", s)
这将删除字符串末尾所有非字母字符的一次运行;
$
锚定会限制范围,并且
[\W\d\uuz]
会正确匹配非字母,而不仅仅是非单词字符(单词字符包括数字和下划线字符)

我还将正则表达式设置为原始字符串(对于正则表达式模式,无论如何都应该这样做),从而消除了对反斜杠加倍的需要


请注意,虽然根据您的具体情况,
[^a-zA-Z]
可以取代
[\W\d\uz]
,但我强烈建议将
[\W\d\uz]
置于
[^a-zA-Z]
之上,因为前者是Unicode友好的,而后者则不是;例如,如果您的文本是
'résumé
,则使用
[^a-zA-Z]
将去除尾随的
é
[\W\d\u]
不会。将模式锚定在末尾,并使用正确的字符类:

output = re.sub("[^a-zA-Z]+$", "", s)
这将删除字符串末尾所有非字母字符的一次运行;
$
锚定会限制范围,并且
[\W\d\uuz]
会正确匹配非字母,而不仅仅是非单词字符(单词字符包括数字和下划线字符)

我还将正则表达式设置为原始字符串(对于正则表达式模式,无论如何都应该这样做),从而消除了对反斜杠加倍的需要


请注意,虽然根据您的具体情况,
[^a-zA-Z]
可以取代
[\W\d\uz]
,但我强烈建议将
[\W\d\uz]
置于
[^a-zA-Z]
之上,因为前者是Unicode友好的,而后者则不是;例如,如果您的文本是
'résumé
,使用
[^a-zA-Z]
将去掉尾随的
é
[\W\d\u]
不会。

++但最好将其改为
re.sub([^a-zA-Z]+$,”,s
注意:此解决方案不支持Unicode,因为它将非ASCII字母视为非字母。我建议使用
[\W\d\]
in就是这个原因。++但最好是使用
re.sub(“[^a-zA-Z]+$”),s
注意:此解决方案不支持Unicode,因为它会将非ASCII字母视为非字母。出于这个原因,我建议使用
[\W\d\uuz]
in。您的正则表达式不会执行您声称的操作,它会输出
SarahRuthers6
(因为
6
是一个“单词字符”;
\w
包括字母、数字和下划线字符)。您的正则表达式不会执行您声称的操作,它会输出
SarahRuthers6
(因为
6
是一个“单词字符”;
\w
包括字母、数字和下划线字符)。