Я работаю над твитами о разных фильмах (используя API поиска в Twitter), и теперь я хотел заменить соответствие фиксированной строкой.Regex, чтобы найти и заменить имена фильмов python
Я боролся с «XMen Apocalypse», потому что есть много способов найти это в твитах. Я искал "XMEN Апокалипсиса", "XMen Апокалипсис", "X-Men Апокалипсис", "XMen", "XMen", "X-Men" и этим retrived меня совпадает также включает в себя "@xmenmovie", "#xmen", "X-Men: апокалипсис" и т.д ...
Это регулярное выражение, которое у меня есть:
xmen_regex = re.compile("(((#)x[\-]?men:?(apocalypse)?)|(x[\-]? ?men[:]?[ ]?(apocalypse)?))")
def re_place_moviename(text, compiled_regex):
return re.sub(compiled_regex, "MOVIE_NAME", text.lower())
я испытал с RegExr, но до сих пор не является точным в некоторых крайних случаях, таких как: '#xmen BlaBla' -> заменить -> '#MOVIE_NAME BlaBla' или 'MOVIE_NAMEblabla'.
Итак, есть лучший способ сделать это? возможно, скомпилируйте другое регулярное выражение (при увеличении длины (?)) и применяя его отдельно?
редактировать
Сдерживает (или кратко):
- Я хочу, чтобы найти "Xmen", "х мужчин", "Xmen"
- Все 1 + "апокалипсис"
- Все 1 + ": апокалипсис"
- также: "#xmen", "# X-Men", "#xmenapocalypse", "# х-menapocalypse"
- Не должно быть подстроки («@xmenmovie» или «lovexmen perfect»), должно содержать как минимум 1 место в начале и в конце выражения.
PS: Другие фильмы проще, но xmen и другие, такие как Rogue One, имеют много способов выразить это, и мы хотим использовать его.
PS1: Я знаю, что \ б может помочь, но я не мог понять, как это работает.
Спасибо! То же самое, что я пришел сегодня. Проблема в том, что я использую re.sub (regx, 'MOVIE'), «группу не захвата», которую он все еще заменяет. т. е. «jaja #xmen jaja» -> jajaMOVIE jaja –
@OmarMiranda: вы можете использовать группу захвата '(^ | \ s)' и добавить ее в замещающую часть. – Toto
jajaja спасибо !!! (^ | \ s) \ 0, поскольку замена делает трюк! :) –