Python 如何在与正则表达式匹配的列表中提取元组对?

Python 如何在与正则表达式匹配的列表中提取元组对?,python,regex,Python,Regex,我有一个元组列表: s = [(0, 'NEW'), (1, 'YOUTUBE'), (2, 'VIDEO'), (3, 'OUT'), (4, 'NOW:TOTTENHAM'), (5, 'NEWS'), (6, 'TRANSFER'), (7, 'WINDOW'), (8, 'UPDATE'), (9, '손흥민'), (10, 'Son'), (11, 'Award'), (12, 'Link'), (13, 'to'), (14, 'Premier'), (15, 'League'),

我有一个元组列表:

s = [(0, 'NEW'), (1, 'YOUTUBE'), (2, 'VIDEO'), (3, 'OUT'), (4, 'NOW:TOTTENHAM'), (5, 'NEWS'), (6, 'TRANSFER'), (7, 'WINDOW'), (8, 'UPDATE'), (9, '손흥민'), (10, 'Son'), (11, 'Award'), (12, 'Link'), (13, 'to'), (14, 'Premier'), (15, 'League'), (16, 'Defen...'), (17, 'TOTTENHAM'), (18, 'NEWS'), (19, 'TRANSFER'), (20, 'WINDOW'), (21, 'UPDATE'), (22, 'Carabao'), (23, 'Cup'), (24, 'Win'), (25, 'Final.'), (26, '손흥민'), (27, 'Son'), (28, 'Contract')]
我试图使用以下正则表达式提取元组中的所有非ASCII单词:

pattern = r'[^\\x00-\\x7F]+'
预期产出为:

[(9, '손흥민'),(26, '손흥민')]
我尝试过这个,但它不起作用,并抛出一个错误TypeError:“int”对象不可下标:


为什么要迭代两次?tup是s的一个元素,您不必迭代子列表

>>> [tup for tup in s if re.match(r'[^\x00-\x7F]+', tup[1])]
[(9, '손흥민'),(26, '손흥민')]

为什么要迭代两次?tup是s的一个元素,您不必迭代子列表

>>> [tup for tup in s if re.match(r'[^\x00-\x7F]+', tup[1])]
[(9, '손흥민'),(26, '손흥민')]

最简单的解决办法是使用这种方法


最简单的解决办法是使用这种方法


如果s是元组列表,则sub_列表必须是每个元组。所以tup必须是tup中的每个值。其中一些是INT。所以tup[0]没有意义。@khelwood是的,这是真的抱歉,实际上是tup[1]我犯了一个错误,更新了问题。但是错误仍然存在。res=[sub_list for sub_list for sub_list in s if re.matchr'[^\x00-\x7F]+',sub_list[1]@yudhiesh我想你不明白我的评论。如果s是元组列表,那么sub_list必须是每个元组。所以tup必须是tup中的每个值。其中一些是INT。所以tup[0]没有意义。@khelwood是的,这是真的抱歉,实际上是tup[1]我犯了一个错误,更新了问题。但是错误仍然存在。res=[sub_list for sub_list in s if re.matchr'[^\x00-\x7F]+',sub_list[1]]@yudhiesh我想你不明白我的评论。
>>> s = [
...     (0, "NEW"),
...     (1, "YOUTUBE"),
...     (2, "VIDEO"),
...     (3, "OUT"),
...     (4, "NOW:TOTTENHAM"),
...     (5, "NEWS"),
...     (6, "TRANSFER"),
...     (7, "WINDOW"),
...     (8, "UPDATE"),
...     (9, "손흥민"),
...     (10, "Son"),
...     (11, "Award"),
...     (12, "Link"),
...     (13, "to"),
...     (14, "Premier"),
...     (15, "League"),
...     (16, "Defen..."),
...     (17, "TOTTENHAM"),
...     (18, "NEWS"),
...     (19, "TRANSFER"),
...     (20, "WINDOW"),
...     (21, "UPDATE"),
...     (22, "Carabao"),
...     (23, "Cup"),
...     (24, "Win"),
...     (25, "Final."),
...     (26, "손흥민"),
...     (27, "Son"),
...     (28, "Contract"),
... ]
>>>
>>> print([(index, item) for (index, item) in s if not item.isascii()])
[(9, '손흥민'), (26, '손흥민')]