我最近在这里一直在问这个问题,但是我还有一个我无法处理的例子。
import re
title = "Nad Ziemią / Above Ground – test - filmy i seriale"
if title.find('/') >= 0:
original_title = (re.split('[-/()]', title)[1])
print(original_title)
其结果将是:
Above Ground - test
我需要再破折号以仅获得电影标题:
Above Ground
可以一并完成吗?
致谢。
答案 0 :(得分:2)
进一步调查您的问题,看起来该字符不是普通的连字符(稍高一些),将其复制到您的regex表达式中,您将看到:
import re
title = "Nad Ziemią / Above Ground – test - filmy i seriale"
if title.find('/') >= 0:
original_title = (re.split('[–\-/()]', title)[1])
print(original_title)
如果有人能弄清楚角色是什么,奖金就会指向。
答案 1 :(得分:2)
使用正则表达式,您可以在肯定断言之后使用正数。查找文档here :)
import re
title = "Nad Ziemią / Above Ground – test - filmy i seriale"
if title.find('/') >= 0:
original_title = re.search('(?<=[-/()])[ \w]+', title)
print(original_title.group(0))
输出:
Above Ground
答案 2 :(得分:1)
重要提示:以下内容按Python 3编写,但是对于Python 2.7(或更旧的版本),您需要处理默认编码方面的差异。请参阅Unicode HOWTO: Unicode Literals in Python Source Code以确定您的具体情况可能需要的内容。
有些麻烦,因为字符串中包含非罗马字符,并且第一个和第二个破折号实际上不是同一字符(第一个是en dash)。如果先encode
字符串,然后在破折号上分割,然后在正斜杠上分割第一个结果,然后对结果进行解码,则实际上可以在不使用正则表达式的情况下获得所需的结果。
title = "Nad Ziemią / Above Ground – test - filmy i seriale"
title.encode().split(b'\xe2\x80\x93')[0].split(b'/')[1].decode()
# OUTPUT
# Above Ground