Próbuję wykonać następujące czynności z wyrażenia regularnego:Python wyrażenie regularne do zastąpienia wszystko oprócz konkretnych słów
import re
x = re.compile('[^(going)|^(you)]') # words to replace
s = 'I am going home now, thank you.' # string to modify
print re.sub(x, '_', s)
Wynik pojawia się:
'_____going__o___no______n__you_'
Wynik chcę jest:
'_____going_________________you_'
Od ^
może być użyty tylko wewnątrz nawiasów []
, ten wynik ma sens, ale nie jestem pewien, jak inaczej to zrobić.
Próbowałem nawet '([^g][^o][^i][^n][^g])|([^y][^o][^u])'
, ale otrzymałem '_g_h___y_'
.
Tylko dla FYI: Powód, dla którego '[^ (going) |^(you)]' zawodzi, jest spowodowany tym, że składnia '[..]' daje tylko jeden znak *. Znak '^' na samym początku jest wyjątkowy, co znaczy "nie", ale wszystko po nim jest uważane za niestandardowy zestaw znaków: '()^ginouy |'. – usr2564301