繁体   English   中英

python删除奇怪的字符

[英]python removing weird characters

我正在尝试删除所有包含怪异字符的句子,例如以下带有许多怪异下划线的句子。

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

我首先创建一个发现奇怪字符的函数,如果为true,则忽略该句子:

    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文件的各行。 如果该行包含奇怪的字符,我将跳过该行。

你可以通过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部分,在我看来这是完全没必要的,所以我放弃它。

我认为问题在于这一行:

filter_fn_list=[underscore_filter(s)]

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

filter_fn_list=[underscore_filter]

我认为您正在使此过程变得比所需的复杂。 使用列表推导尝试以下更简单的选择:

# 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']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM