具有多个分隔符和非罗马字符的Python字符串拆分

时间:2018-10-04 16:55:03

标签: python python-2.7 split

我最近在这里一直在问这个问题,但是我还有一个我无法处理的例子。

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

可以一并完成吗?

致谢。

3 个答案:

答案 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