【问题标题】:How can I slice a substring from a unicode string with Python?如何使用 Python 从 unicode 字符串中分割子字符串?
【发布时间】:2015-08-07 01:55:08
【问题描述】:

结果我有一个 unicode 字符串:u'splunk>\xae\uf001'

我怎样才能得到子字符串'uf001'

作为python中的简单字符串?

【问题讨论】:

  • 你的意思是你需要字符串 - 'uf001 - 还是它所代表的实际字符?
  • s[-1]........
  • @AnandSKumar 实际字符串。

标签: python string unicode substring


【解决方案1】:

字符 uf001 实际上并不存在于字符串中,因此您不能直接将它们切掉。你可以这样做

repr(s)[-6:-1]

'u' + hex(ord(s[-1]))[2:]

【讨论】:

    【解决方案2】:

    由于您想要实际的字符串(从 cmets 中看到),只需获取最后一个字符 [-1] index ,示例 -

    >>> a = u'splunk>\xae\uf001'
    >>> print(a)
    splunk>®ï€
    >>> a[-1]
    '\uf001'
    >>> print(a[-1])
    ï€
    

    如果您想要 unicode 表示 (\uf001) ,请使用 repr(a[-1]) ,示例 -

    >>> repr(a[-1])
    "'\\uf001'"
    

    \uf001 是单个 unicode 字符(不是多个字符串),所以你可以像上面那样直接获取那个字符。

    您看到\uf001 是因为您正在检查字符串上repr() 的结果,如果您打印它,或在其他地方使用它(如文件等),它将是正确的\uf001 字符。

    【讨论】:

    • 如果你想打印字符u'\uf001',把最后一个改成print(repr(a[-1]))
    • 根据 cmets 的说法,他想要它所代表的实际字符串。
    • 是的,这很难理解(因为您问他是否想要实际的字符或字符串表示形式,他回答“实际的字符串” - 这可能意味着两者之一)。无论哪种方式都很好。
    【解决方案3】:

    u'' 它是 Unicode 字符串在 Python 源代码中的表示方式。 REPL 默认使用这种表示来显示 unicode 对象:

    >>> u'splunk>\xae\uf001'
    u'splunk>\xae\uf001'
    >>> print(u'splunk>\xae\uf001')
    splunk>®
    >>> print(u'splunk>\xae\uf001'[-1])
    
    

    如果您的终端未配置为显示 Unicode,或者您使用的是窄版本(例如,它可能适用于 Windows 上的 Python 2),那么结果可能会有所不同。

    Unicode 字符串是 Python 中不可变的 Unicode 代码点序列。 len(u'\uf001') == 1:其中不包含uf001(5 个字符)。你可以写成u''(如果你使用非ascii字符,需要在Python 2上声明你的源文件的字符编码):

    >>> u'\uf001' == u''
    True
    

    这只是表示完全相同的 Unicode 字符(在本例中为单个代码点)的不同方式。

    注意:某些用户感知的字符可能跨越 几个 Unicode 代码点,例如:

    >>> import unicodedata
    >>> unicodedata.normalize('NFKD', u'ё')
    u'\u0435\u0308'
    >>> print(unicodedata.normalize('NFKD', u'ё'))
    ё
    

    【讨论】:

    • 除了您的注释之外,Python2 支持 Astral 字符的方式与 JavaScript 相同:非常糟糕。 len(u'?') == 2.
    • @Amadan:仅适用于狭窄的 Python 版本,即 Windows。相同的代码在 Linux 上会返回 1(宽版本)
    • 你是对的。 OSX 默认也很窄,FWIW。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 2019-03-15
    • 2021-06-12
    相关资源
    最近更新 更多