我一直在写关于不同电影的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”。你知道吗
有更好的方法吗?可能编译不同的正则表达式(在增加长度顺序(?)分别使用?你知道吗
编辑
约束(或摘要):
PS:其他电影更容易,但是xmen和其他像Rogue One的电影有很多表达方式,我们想抓住它的大部分。
PS1:我知道\b会有帮助,但我不明白它是如何工作的。
这应该根据您的(模糊的)限制条件进行:
(?i)(?<![#@])x[- ]?men(?!:)( apocalypse)?
(?i)
忽略大小写标志(?<![#@])
在'xmen'之前没有#
或@
[- ]?
可选-
或(?!:)
在'xmen'后没有冒号( apocalypse)?
可选启示字符串编辑:我认为使用边界(
\b
)更合适,而不是要求前面/后面有空格,即(?i)\b(?<!@)(x[- ]?men:?\s?(?:apocalypse)?)\b
,因为“xmen”可能会在句子开头。你知道吗这一个应该做的工作:
更换时,如果要保留之前的空间,请使用捕获组并将其放入更换部件中:
说明:
相关问题 更多 >
编程相关推荐