python删除奇怪的字符

时间:2015-02-12 06:17:04

标签: python regex function

我正在尝试删除任何包含奇怪字符的句子,例如下面那些有很多奇怪下划线的字符。

sentence=='"____ __,_____________.._____________________"

我首先创建一个能够发现怪异角色的函数,如果是真的,我们会忽略那个句子:

    def underscore_filter(s):
        return "____ __," in s

    filter_fn_list = [underscore_filter]

    for fn in filter_fn_list:
        if fn(sentence):
            filter_match = True
            break
        if filter_match == True:
            continue

所以真正的问题只在于功能部分:

 def underscore_filter(s):
     return "____ __," in s

我只是不明白,尽管在我的函数中返回了完全相同的下划线模式,但是当我调用它时该函数的输出始终为false。有什么问题,我怎么能重写这段代码?我仍然需要它采用这种类似的格式。

我最后添加了“continue”,因为我的代码实际上正在读取CSV文件的行。如果该行包含奇怪的字符,我将跳过该行。

3 个答案:

答案 0 :(得分:0)

您可以通过lambda实现此目的。

def underscore_filter(s):
    return "____ __," in s

filter_match = False
sentence = "____ __,_____________.._____________________"

filter_fn_list = [ lambda s:underscore_filter(s) ]

for fn in filter_fn_list:
    if fn(sentence):
        filter_match = True
        break

print filter_match

顺便说一句,我不明白为什么你在周期中添加了continue部分,在我看来这完全没必要,所以我放弃了它。

答案 1 :(得分:0)

我认为问题在于这一行:

filter_fn_list=[underscore_filter(s)]

它做什么,它返回true或False到filter_fn_list。但是,我想你想要制作一个函数列表,你可以稍后在循环中调用它们。因此你应该这样做:

filter_fn_list=[underscore_filter]

答案 2 :(得分:0)

我认为你让它变得比它需要的更复杂。使用列表推导尝试这个更简单的替代方案:

# list of sentences we want to filter
sentences = ["abcd", "a____ __,", "sdf", "ghke_______kh"]

# list of patterns we want to filter out
bad_patterns = ["____ __,", "_______"]

# perform the filtering
filtered_sentences = [s for s in sentences 
    if not any(pattern in s for pattern in bad_patterns)]

打印生成的filtered_sentences列表会产生以下输出:

  

['abcd','sdf']