Как сопоставить слово в регулярном выражении-Python - PullRequest
0 голосов
/ 16 мая 2018

Как сопоставить слово в списке, когда я использовал демо в https://regex101.com/, оно совпадает с \w+, но когда я добавил свой код, слово не обнаружено, поэтому это мой код:

def MultiTrain(self):    
      for fitur in self.fiturs:
            if (fitur[0] == 'F7') or (fitur[0] == 'F8') or (fitur[0] == 'F9') or (fitur[0] == 'F10') or (
                    fitur[0] == 'F13') or (fitur[0] == 'F14') or (fitur[0] == 'F15') or (fitur[0] == 'F16') or (
                    fitur[0] == 'F17') or (fitur[0] == 'F23') or (fitur[0] == 'F24') or (fitur[0] == 'F25') or (
                    fitur[0] == 'F26') or (fitur[0] == 'F27') or (fitur[0] == 'F28') or (fitur[0] == 'F29') or (
                    fitur[0] == 'F30') or (fitur[0] == 'F37') or (fitur[0] == re.findall('\w+', fitur[0])) :
                print fitur

и это слово, которое я хочу сопоставить с регулярным выражением:

F37,0,1,0,1,1,1,0,1,0,2
F7,0,0,0,0,0,0,1,0,1,0
F11,0,0,1,0,0,1,0,0,0,0
angkasa,1,0,1,0,0,0,0,0,0,0
action,0,1,0,0,0,0,0,0,0,0
acu,0,0,0,0,1,0,0,0,0,0
ampun,0,0,0,0,0,0,0,1,0,0

Вывод программы:

    F37,0,1,0,1,1,1,0,1,0,2
    F7,0,0,0,0,0,0,1,0,1,0
    F11,0,0,1,0,0,1,0,0,0,0

но я ожидаю:

    F37,0,1,0,1,1,1,0,1,0,2
    F7,0,0,0,0,0,0,1,0,1,0
    F11,0,0,1,0,0,1,0,0,0,0
    angkasa,1,0,1,0,0,0,0,0,0,0
    action,0,1,0,0,0,0,0,0,0,0
    acu,0,0,0,0,1,0,0,0,0,0
    ampun,0,0,0,0,0,0,0,1,0,0

Фитур [0] со словом не обнаружен только F37-F11 Как я могу исправить регулярное выражение?

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Это потому, что re.findall ('\ w +', fitur [0]) возвращает список ['action'] попробуйте re.findall ('\ w +', fitur [0]) [0] вместо

0 голосов
/ 16 мая 2018

Try.

import re
with open(filename, "r") as infile:
    for fitur in infile.readlines():
        fitur = fitur.split(',')
        if (fitur[0] == 'F7') or (fitur[0] == 'F8') or (fitur[0] == 'F9') or (fitur[0] == 'F10') or (
                fitur[0] == 'F13') or (fitur[0] == 'F14') or (fitur[0] == 'F15') or (fitur[0] == 'F16') or (
                fitur[0] == 'F17') or (fitur[0] == 'F23') or (fitur[0] == 'F24') or (fitur[0] == 'F25') or (
                fitur[0] == 'F26') or (fitur[0] == 'F27') or (fitur[0] == 'F28') or (fitur[0] == 'F29') or (
                fitur[0] == 'F30') or (fitur[0] == 'F37') or (fitur[0] == re.findall('\w+', fitur[0])[0]):
            print fitur

re.findall('\w+', fitur[0]) возвращает список. Попробуйте использовать индекс для доступа к первому элементу. Пример: re.findall('\w+', fitur[0])[0]

Просто примечание. Это было бы легче поддерживать

if (fitur[0] == ['F7', 'F8', 'F9', 'F10', 'F13', 'F14', 'F23', 'F24', 'F25', 'F26', 'F27', 'F28', 'F29', 'F30', 'F37']) or (fitur[0] == re.findall('\w+', fitur[0])[0]):
    print fitur
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...