如何在python中匹配对象?

时间:2015-03-26 03:08:04

标签: python regex

我使用的是Python 2.7。 我想转换网址。

我想要的是

INPUT:

HOGEHOGE<url>http://super.long.url.com</url>BARBAR<url>http://super.long.url.com</url>FUGAFAUGA

*字符串包含日语

输出:

HOGEHOGEhttp://short.urlBARBARhttp://short.url2FUGAFUGA

我的代码在这里。

# -*- coding: utf-8 -*-

import re

def __make_shorten_url_text(text):

    def make_shorten_url(m):
        # (1)how to use it??
        long_url = m.compile('\g<1>')
        import urllib
        import bitly_api
        login_name = 'my id'
        api_key = 'my secret key'
        bitly = bitly_api.Connection(login_name, api_key)
        quote_url = urllib.quote(long_url.group(), ':/?&=')
        try:
            result = bitly.shorten(quote_url)
        except:
            return long_url
        return result['url'].encode('utf-8')

    shortened_url_text = re.sub(ur'<url>(.*?)</url>', make_shorten_url, text)
    return shortened_url_text

print __make_shorten_url_text('HOGE https://stackoverflow.com/posts/29250195/ BARBAR')

我使用bitly_api。

我想获取网址但我不知道如何使用'\ g&lt; 1&gt;'在MatchObject中。 我的代码中注释掉的(1)是我不知道如何修复。

你能告诉我如何解决它吗?

INPUT:

JAPANESE_CHATACTER<url>https://stackoverflow.com/posts/29250195/</url>JAPANESE_CHATACTER
Python中的

输出:

JAPANESE_CHATACTERhttp://bit.ly/1GXY6npJAPANESE_CHATACTER。
Django中的

输出:

JAPANESE_CHATACTER&lt;url&gt;https://stackoverflow.com/posts/29250195/&lt;/url&gt;JAPANESE_CHATACTER

它会自动转换。

1 个答案:

答案 0 :(得分:0)

official documentation上没有详细记录吗?

def make_shorten_url(m):
    long_url = m.group(1)   # Access the capture group here
    import urllib
    import bitly_api
    login_name = 'my id'
    api_key = 'my secret key'
    bitly = bitly_api.Connection(login_name, api_key)
                           # .group() no more needed
    quote_url = urllib.quote(long_url, ':/?&=')
    try:
        result = bitly.shorten(quote_url)
    except:
        return long_url
    return result['url'].encode('utf-8')