在Python中,如果一行中的某个单词不包含某些字符,如何从列表列表中删除该行?

2024-09-28 01:30:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含词汇的列表。 我想从列表中删除列表,如果它们的词汇不包含字符模式,例如“(atè|atwa | atif)$。例如:

list = [['blablatè', 'blabla'], ['klak'], ['matwa', 'mat'], ['ma', 'mat'], ['ratif']]

预期结果将是:

[['blablatè', 'blabla'], ['matwa', 'mat'], ['ratif']]

我以为我可以通过一个循环和re.search()来完成,但它不起作用。这是我的密码:

import re
result = [['blablatè', 'blabla'], ['klak'], ['matwa', 'mat'], ['ma', 'mat'], ['ratif']]
rendp = "(atè|atwa|atif)$"
for row in result :
    if re.search(rendp, row) == None : 
        result.remove(row)
joined = '\n'.join(' - '.join(map(str, row)) for row in result)
print(joined)

错误如下:

Traceback (most recent call last):
  File "C:\Users\alice\OneDrive\Documents\Visual Studio 2017\Projects\CréoleDB\CréoleDB\CréoleDB.py", line 65, in <module>
    if re.search(rendp, row) == None :
  File "C:\Users\alice\Anaconda3\lib\re.py", line 182, in search
    return _compile(pattern, flags).search(string)
TypeError: expected string or bytes-like object

我真的需要一些帮助。非常感谢


Tags: inre列表searchresult词汇rowcr
3条回答

您看到的错误是因为您试图在内部列表中搜索模式。re.search只在搜索字符串中的模式时起作用。您可以尝试使用如下嵌套循环:

for word_list in result:
    for word in word_list:
        if re.search(rendp, word) == None:
            word_list.remove(word)

使用re.compile()regex.search()any()函数:

import re

lists = [['blablaté', 'blabla'], ['klak'], ['matwa', 'mat'], ['ma', 'mat'], ['ratif']]
pat = re.compile(r'(até|atwa|atif)$')  # compiled regular expression object
result = [l for l in lists if any(pat.search(i) for i in l)]

print(result)

输出:

[['blablaté', 'blabla'], ['matwa', 'mat'], ['ratif']]

p.S.请不要将变量名命名为listdictstr等,因为它们是内置的Python数据类型

当前,您正在将一个列表(row)传递给re.search;但是,只有字符串可以用于模式匹配。请尝试使用以下方法筛选列表:

import re
result = [['blablaté', 'blabla'], ['klak'], ['matwa', 'mat'], ['ma', 'mat'], ['ratif']]
rendp = "(até|atwa|atif)$"
final_list = [i for i in result if any(re.findall(rendp, b) for b in i)]

输出:

[['blablaté', 'blabla'], ['matwa', 'mat'], ['ratif']]

相关问题 更多 >

    热门问题