我试图删除除字符串空格之外的所有非字母数字字符,但似乎无法弄清楚我是如何排除空格的。我现在正是这样做的:
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('_','')
答案 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
所以你说:删除所有非字母数字字符而不是空格或是下划线字符。