2015-05-14 8 views
2

Я хотел был бы использовать вариант случая соответствия. У меня есть фрагмент кода для поиска строки в списке. Я думаю, что есть более элегантный способ сделать то же самое.python regex match case option

searchString = "maki" 
itemList = ["Maki", "moki", "maki", "Muki", "Moki"] 

resultList = [] 
matchCase = 0 

for item in itemList: 
    if matchCase: 
     if re.findall(searchString, item): 
      resultList.append(item) 
    else: 
     if re.findall(searchString, item, re.IGNORECASE): 
      resultList.append(item) 

я мог бы использовать re.findall(searchString, item, flags = 2) потому re.IGNORECASE в основном целое число (2), но я не знаю, какой номер будет означать «MatchCase» вариант.

+2

'[x.lower() для й в ITEMLIST]' возвращает к нижнему регистру списка, вы на самом деле не нужны регулярное выражения для этой проблемы. – Maroun

ответ

3

Вы можете следить за соблюдением регистрозависимости поиска внутри понимания:

searchString = "maki" 
itemList = ["Maki", "moki", "maki", "Muki", "Moki"] 

resultList =[] 
matchCase = 1 

if matchCase: 
    resultList = [x for x in itemList if x == searchString] 
else: 
    resultList = [x for x in itemList if x.lower() == searchString.lower()] 

print resultList 

Он напечатает ['maki'] если matchCase является 1 и ['Maki', 'maki'], если он установлен в 0.

См IDEONE demo

+0

Я просто понимаю, мой первоначальный список был простым. Что делать, если у нас есть элементы в 'itemList', например' 'makiMuki ',' mikimaKi'' и т. Д.? – Prag

+0

Если вы ищете 'makimuki' случай-insensitively с' makiMuki' в вашем списке, он должен быть найден. Не могли бы вы, например, развить мою демонстрацию IDEONE, чтобы продемонстрировать проблему, которую вы сейчас имеете? –