Regex查找和替换电影名称python

2024-09-28 21:35:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在写关于不同电影的tweet(使用Twitter搜索API),现在我想用一个固定字符串替换匹配。你知道吗

我一直在努力与“圣诞节启示录”,因为有很多方法可以在推特上找到这一点。 我找了《X战警启示录》,《X战警启示录》,《X战警启示录》,《X战警启示录》,《X战警启示录》,《X战警启示录》,《X战警启示录》,《X战警启示录》,《X战警启示录》,《X战警启示录》,《X战警启示录》,《X战警启示录》等。。。你知道吗

这是我的正则表达式:

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”->;replace->;“#MOVIEŠNAME bla”或“MOVIEŠnamebala”。你知道吗

有更好的方法吗?可能编译不同的正则表达式(在增加长度顺序(?)分别使用?你知道吗

编辑

约束(或摘要):

  1. 我要找“x战警”,“x战警”,“x战警”
  2. 所有1+“启示录”
  3. 所有1+“:启示录”
  4. 还有:“#xmen”、“#x-men”、“#xmenapocalypse”、“#x-menapocalypse”
  5. 所有musn不是子字符串(“@xmenmovie”或“lovexmen perfect”),必须在表达式的开头和结尾至少包含1个空格。你知道吗

PS:其他电影更容易,但是xmen和其他像Rogue One的电影有很多表达方式,我们想抓住它的大部分。

PS1:我知道\b会有帮助,但我不明白它是如何工作的。


Tags: 方法字符串textnamegtre电影movie
2条回答

这应该根据您的(模糊的)限制条件进行: (?i)(?<![#@])x[- ]?men(?!:)( apocalypse)?

  • (?i)忽略大小写标志
  • (?<![#@])在'xmen'之前没有#@
  • [- ]?可选-
  • (?!:)在'xmen'后没有冒号
  • ( apocalypse)?可选启示字符串

编辑:我认为使用边界(\b)更合适,而不是要求前面/后面有空格,即(?i)\b(?<!@)(x[- ]?men:?\s?(?:apocalypse)?)\b,因为“xmen”可能会在句子开头。你知道吗

这一个应该做的工作:

(?:^|\s)#x[ -]?men:?\s?apocalypse\b

更换时,如果要保留之前的空间,请使用捕获组并将其放入更换部件中:

(^|\s)#x[ -]?men:?\s?apocalypse\b

说明:

(?:^|\s)    : non capture group, begining of string or a space
#           : #
x           : x
[ -]?       : optional space or dash
men         : men
:?          : optional semicolon
\s?         : optional space
apocalypse  : apocalypse
\b          : word boundary

相关问题 更多 >