【问题标题】:Python - How to print a specific textPython - 如何打印特定文本
【发布时间】:2011-08-08 19:47:19
【问题描述】:
def handler_users_answ(coze, res, type, source):
    if res:
        if res.getType() == 'result':
            aa=res.getQueryChildren()
            if aa:
                print 'workz1'
                for x in aa:
                    m=x.getAttr('jid')
                    if m:
                        print m

所以这段代码返回给我这样的值:

roomname@domain.com/nickname1
roomname@domain.com/nickname2

等等,但我希望它只打印'/'之后的值。 喜欢:

nickname1
nickname2

提前致谢。

【问题讨论】:

  • 为什么使用getter/setter方法?这是非常不合时宜的。如果您需要 getter/setter 逻辑,请使用属性。

标签: python printing split xmpp


【解决方案1】:

您可以使用rpartition 获取字符串中最后一个\ 之后的部分。

【讨论】:

  • 我刚学了 rpartition,一直使用 rsplit(1)[1],很高兴知道,+1,谢谢。
  • @utdemir:我认为区别主要在于风格,尽管快速的timeit 表明在某些情况下rpartition 会快一些。
  • rpartition 在这里不正确,因为这是一个有效的 JID:foo@example.com/bar/baz,而资源部分是 bar/baz,而不是 baz
【解决方案2】:
a = 'roomname@domain.com/nickname1'

b=a.split('/');
c=b[1];

【讨论】:

  • 这在roomname@domain.com/nickname1/foo 上也失败了。
【解决方案3】:

您可以使用rsplit 进行右拆分:

a = 'roomname@domain.com/nickname1'
try:
    print a.rsplit('/')[1][1]
except IndexError:
    print "No username was found"

我认为这是高效且可读的。如果你真的需要它更快,你可以使用rfind:

a = 'roomname@domain.com/nickname1'
index = a.rfind('/')
if index != -1:
    print a[index+1:]
else:
    print "No username was found"

【讨论】:

  • 这两个都在roomname@domain.com/nickname1/foo上失败。
  • 当然失败了。问题是关于 roomname@domain.com/nickname1 而不是 roomname@domain.com/nickname1/foo
  • 对。这个问题措辞不好。问题的意图是“如何解析 RFC 6122 Jabber ID?”。
【解决方案4】:

要正确完全解析和验证 JID,请参阅 this answer。有一堆奇怪的小边缘情况,您可能不会想到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多