【问题标题】:Python string splitting with more than one separator and non roman characters [duplicate]具有多个分隔符和非罗马字符的Python字符串拆分[重复]
【发布时间】:2019-03-10 03:39:50
【问题描述】:

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

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

是否可以一次性完成所有工作?

问候。

【问题讨论】:

  • 你不能这样做:title.split('/ ')[1].split(' -')[0] ?

标签: python python-2.7 split


【解决方案1】:

进一步调查您的问题,看起来该字符不是正常的连字符(它略高),将其复制到您的正则表达式中,您会看到:

import re

title = "Nad Ziemią / Above Ground – test - filmy i seriale"

if title.find('/') >= 0:
    original_title = (re.split('[–\-/()]', title)[1])


print(original_title)

如果有人能弄清楚这个角色是什么,则可以获得奖励积分。

【讨论】:

  • 哇,我要买新眼镜了,对不起,谢谢。
【解决方案2】:

使用正则表达式,您可以使用积极的 loosbehind 断言。查找文档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 

【讨论】:

    【解决方案3】:

    重要提示:以下代码使用 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
    

    【讨论】:

    • 好吧,现在我发现 Python 2.1.7 中的这些字符存在一些问题。尝试使用您的解决方案,但得到:UnicodeEncodeError: 'ascii' codec can't encode character u'\u0142' in position 2: ordinal not in range(128)
    • 哦,必须添加:import sys reload(sys) sys.setdefaultencoding('utf8')。现在它工作正常。
    • @serengeti - 非常重要的一点。对您的问题上的 python-2.7 标记进行了修饰,在这种情况下这是一个真正的问题。 Python 2.7 默认编码是 ASCII,在 2.4 之前默认编码是 Latin-1。有很多方法可以解决这个问题,任何使用旧版本 Python 的人都应该阅读Unicode HOWTO: Unicode Literals in Python Source Code,以帮助确定在他们的具体情况下什么会起作用。
    猜你喜欢
    • 2021-11-10
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 2020-04-17
    • 1970-01-01
    相关资源
    最近更新 更多