2

我弄清楚如何使用以下函数在 python 中删除特殊的非字母数字字符:

p_nonalphanum = re.compile('\W+')

def removeNonAlphaNum(string):
        m = p_nonalphanum.match(string)
        if m:
            string = string[m.end():]
        return string

我想保留一些特殊字符,例如我认为是数字的 ½、¾。我应该如何编辑我的正则表达式?

例如:从“• ½ 杯面粉”“½ 杯面粉”

4

3 回答 3

3

您可以使用否定字符类并添加要保留的所有字符

你可以这样做:

p_nonalphanum = re.compile('[^\w½¾]+')
print (p_nonalphanum.sub('', test))
于 2012-05-25T09:34:28.480 回答
2

不要为手动添加所需的每个字符的正则表达式而烦恼,使用内置isalnum函数!

>>> s = "• ½ cup flour -> ½ cup flour"
>>> def only_alphanum(s):
...     s = unicode(s, "utf-8")
...     return ' '.join(c for c in s.split() if c.isalnum())
... 
>>> print only_alphanum(s)
½ cup flour ½ cup flour

这将让您捕获任何分数,而不仅仅是您在正则表达式中组装的分数列表(这可能会很快变长)

>>> s = "• ¼ cup oats -*(*&!!"
>>> print only_alphanum(s)
¼ cup oats
于 2012-05-25T09:45:54.543 回答
2
>>> def remove_unwanted(s):
...     '''• ½ cup flour -> ½ cup flour'''
...     allowed = '[\w½¾]+'
...     return ' '.join(re.findall(allowed, s))
... 
>>> print remove_unwanted('• ½ cup flour ->')
½ cup flour
于 2012-05-25T09:57:59.677 回答