我正在尝试删除任何包含奇怪字符的句子,例如下面那些有很多奇怪下划线的字符。
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文件的行。如果该行包含奇怪的字符,我将跳过该行。
答案 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']