gpt4 book ai didi

python - 正则表达式查找替换电影名称python

转载 作者:太空宇宙 更新时间:2023-11-03 15:49:05 25 4
gpt4 key购买 nike

我一直在处理有关不同电影的推文(使用 Twitter 搜索 API),现在我想用固定字符串替换匹配项。

我一直在与“XMen Apocalypse”作斗争,因为有很多方法可以在推文中找到它。我寻找“X战警天启”“X战警天启”“X战警天启”“X战警”"X-Men""X Men",它为我检索了还包括 "@xmenmovie" 的匹配项“#xmen”“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' -> 替换 -> '#MOVIE_NAME blabla' 或 'MOVIE_NAMEblabla'。

那么,有更好的方法吗?也许编译不同的正则表达式(按增加的长度顺序(?))并单独应用它?

编辑

约束(或摘要):

  1. 我想找到“x战警”、“x战警”、“x战警”
  2. 全部 1 +“启示录”
  3. 全部 1 +“:启示录”
  4. 还有:“#xmen”、“#x-men”、“#xmenapocalypse”、“#x-menapocalypse”
  5. 全部不能是子字符串(“@xmenmovie”或“lovexmen Perfect”),表达式的开头和结尾必须至少包含 1 个空格。

PS:其他电影更容易,但《X战警》和《侠盗一号》等其他电影有很多表达方式,我们希望捕获其中的大部分。

PS1:我知道 \b 可以提供帮助,但我无法理解它是如何工作的。

最佳答案

这个应该可以完成这项工作:

(?:^|\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

关于python - 正则表达式查找替换电影名称python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41474535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com