如何为有4个或5个字母的国家在python中生成带有regex的列表?
names = ['Azerbaijan', 'Zimbabwe', 'Cuba', 'Cambodia', 'Somalia','Mali', 'Belarus', "Côte d'Ivoire", 'Venezuela', 'Syria', 'Kazakhstan', 'Austria', 'Malawi', 'Romania', 'Congo (Brazzaville)']我试图这样做,但它返回一个空列表:
import re
n = [w for w in names if re.findall(r'[A-Z]{4,6},', str(names))]
print(n)
Output:
[]这是一个练习,所以我只能用模块re来完成它。任何帮助都将不胜感激。
发布于 2022-10-23 19:33:31
您可以使用len(w)。
>>> names = ['Azerbaijan', 'Zimbabwe', 'Cuba', 'Cambodia', 'Somalia','Mali', 'Belarus', "Côte d'Ivoire", 'Venezuela', 'Syria', 'Kazakhstan', 'Austria', 'Malawi', 'Romania', 'Congo (Brazzaville)']
>>> [w for w in names if w.isalpha() and (len(w) in range(4,6))]
['Cuba', 'Mali', 'Syria']但是如果您想用regex来解决这个问题,您可以使用re.search,如果您在list中有numbers,您可以使用walrus操作符(:=)来处理python>= 3.8。
names = ['1234', 'Azerbaijan', 'Cuba']
print([w for w in names if (tmp := re.search(r'[A-Za-z]{4,5}', w)) and (tmp.group(0) == w)])
# ['Cuba']对于python < 3.8,可以使用try/except。
names = ['1234', 'Azerbaijan', 'Cuba']
res = []
for w in names:
try :
if re.search(r'[A-Za-z]{4,5}', w).group(0) == w:
res.append(w)
except AttributeError:
continue
print(res)
# ['Cuba']发布于 2022-10-23 19:33:16
如果您需要使用re,那么下面是您的答案find words of length 4 using regular expression
如果您不需要使用re,请在名称中使用n= name,如果len( name ) in (4,5)
https://stackoverflow.com/questions/74174171
复制相似问题