Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python删除奇怪的字符_Python_Regex_Function - Fatal编程技术网

python删除奇怪的字符

python删除奇怪的字符,python,regex,function,Python,Regex,Function,我试图删除任何包含奇怪字符的句子,比如下面有很多奇怪下划线的句子 sentence=='"____ __,_____________.._____________________" 首先,我创建了一个函数,该函数可以发现奇怪的字符,如果为真,我们将忽略这句话: def underscore_filter(s): return "____ __," in s filter_fn_list = [underscore_filter] for fn in

我试图删除任何包含奇怪字符的句子,比如下面有很多奇怪下划线的句子

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

您可以通过
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\u fn\u列表中。但是,我认为您需要创建一个函数列表,稍后可以在循环中调用这些函数。因此,你应该:

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)]
打印生成的
过滤句子列表产生以下输出:

['abcd','sdf']


你的压痕有点模糊。它可能是在StackOverflow上计算出降价渲染器的一个工件,也可能是混合了空格和制表符(不要这样做…使用
python-t yourscript.py运行以获得有关该问题的警告)。无论如何,你发布的代码似乎是可疑的
filter\u fn\u list=[下划线过滤器]
将是
[True]
[False]
(取决于
s
),这与以后的用法完全不匹配。。。事实上,对于这段代码,我期望出现某种异常……顺便说一句,根据您的代码
如果filter\u match==True:continue
是完全不必要的。为什么下划线很奇怪?公平地说,他们可能认为你是。对于未来的问题,请在你的问题中包括当前和完整的代码示例。看见它可以防止人们浪费时间指出代码中与当前问题无关的内容,或者是您已经修复的错误。