Python:尝试降低字符串并删除空格以外的非字母数字字符

时间:2015-06-07 12:58:10

标签: python

我试图删除除字符串空格之外的所有非字母数字字符,但似乎无法弄清楚我是如何排除空格的。我现在正是这样做的:

re.sub('[\W_]+', '', text).lower().strip()

但运行我的函数会产生以下结果:

print removePunctuation('Hi, you!')
print removePunctuation(' No under_score!')
hiyou
nounderscore

我想要的地方:

hi you
no underscore

那么如何排除空间被替换?

我目前的最佳状态是:

re.sub('[^\s\w]+', '', text).lower().strip().replace('_','')

5 个答案:

答案 0 :(得分:6)

你可以使用这个,

re.sub(r'[^\sa-zA-Z0-9]', '', text).lower().strip()

示例:

>>> import re
>>> def removePunctuation(s):
        return re.sub(r'[^\sa-zA-Z0-9]', '', s).lower().strip()

>>> print removePunctuation('Hi, you!')
hi you
>>> print removePunctuation(' No under_score!')
no underscore

re.sub('(?!\s)[\W_]', '', text).lower().strip()

答案 1 :(得分:0)

您可能更喜欢列表理解:

result = ''.join([c for c in myString if str.isalnum(c) or str.isspace(c)])

答案 2 :(得分:0)

生成器理解怎么样?它比使用RegExp更具可读性。

def removePunctuation(s):
    return ''.join(l for l in s if l.isalnum() or l == ' ').lower().strip()

lambda

removePunctuation = lambda s: ''.join(l for l in s if l.isalnum() or l == ' ').lower().strip()

答案 3 :(得分:0)

您可以使用str.translate删除标点符号:

Class<?> clazz;
try {
    clazz = Class.forName("classes.Pizza");
    Object p2 = clazz.newInstance();
    /*System.out.println(((Pizza)p2).test);*/
    System.out.println(clazz.getDeclaredField("test").get(p2));
} catch (ClassNotFoundException e) {
    e.printStackTrace();
} catch (InstantiationException e) {
    e.printStackTrace();
} catch (IllegalAccessException e) {
    e.printStackTrace();
} catch (NoSuchFieldException e) {
    e.printStackTrace();
}

对于python3:

s = 'Hi, you!'

from string import  punctuation

print(s.translate(None,punctuation).lower())
hi you

在一个功能中:

s = 'Hi, you!'

from string import  punctuation

print(s.translate({ord(k):"" for k in punctuation}).lower())
hi you

输出:

from string import punctuation

def remove_punctuation(s):
    return s.translate(None,punctuation).lower()

def remove_punctuation(s):
    return s.translate({ord(k): "" for k in punctuation}).lower()

如果要删除前导空格,请添加条带。

In [3]: remove_punctuation(' No under_score!')
Out[3]: ' no underscore'

In [4]: remove_punctuation('Hi, you!')
Out[4]: 'hi you'

输出:

from string import punctuation
def remove_punctuation(s):
    return s.translate(None,punctuation).lower().strip()

答案 4 :(得分:-1)

您可以从其他方面解决问题:

re.sub('([^\w ]|_)+', '', 'a ,_  b').lower().strip()

它提供a b

所以你说:删除所有非字母数字字符而不是空格或是下划线字符。