否定正则表达式和子

时间:2015-06-11 21:06:42

标签: python regex

我有以下字符串

t1 = 'hello, how are you ?'

我只想得到这个:

t2 = 'hello how are you'

所以我试图使用sub()和这样的否定正则表达式:

t2 = re.sub(r'^([a-z])','',t1)

但我不能成功。

删除标点符号的最佳方法是什么?

由于

3 个答案:

答案 0 :(得分:1)

尝试这样的事情:

re.sub("[^a-zA-Z ]","",'hello, how are you ?').rstrip()

在删除问号后,rstrip可以摆脱留下的尾随空格。

当然,这只是你真的想要使用正则表达式。 @ f43d65链接的问题中的任何一种方式都可能正常工作,也可能更快。

答案 1 :(得分:1)

删除标点符号的最佳方法是不使用正则表达式。

# Python 3
import string

transmapping = str.maketrans(None, None, string.punctuation)

t1 = 'hello, how are you ?'
t2 = t1.translate(transmapping).strip()

以下是str.maketransstr.translate

的Python3文档
# Python 2
import string

t1 = 'hello, how are you ?'
t2 = t1.translate(None, deletechars=string.punctuation).strip()

以下是string.maketrans的Python2文档(此处未使用)和str.translate

使用正则表达式进行字符串转换有点像prybar那样使用反铲。这是巨大的,笨拙的,如果你不这样做,可能会犯错误 juuuust

答案 2 :(得分:0)

假设您只想删除最后一个标点符号并且它是一个问号:

/ [\?] $ /

这就是说删除字符串末尾括号中的任何内容。