RegEx将提取我的链接?

时间:2017-01-03 01:53:00

标签: python regex

我有几个python字符串,如下所示:

s = '  text before [[my.fake.web.address.com][link text]] text after   '

我正在尝试编写一个用html链接[[my.fake.web.address.com][link text]]替换<a href="my.fake.web.address.com">link text</a>的函数。为此,我想要一个将我的字符串分成列表的函数

>>> myfunc(s)
['  text before ', 'my.fake.web.address.com', 'link text', ' text after   ']

我现在使用的功能是

def myfunc(s):
    before, rest = s.split('[[')
    address, rest = rest.split('][')
    linktext, after = rest.split(']]')
    return [before, address, linktext, after]

我很好奇是否有更好的方法来做到这一点。是否有更高效的RegEx解决方案?

5 个答案:

答案 0 :(得分:4)

如果您的文本不包含[[]],除了包含地址和链接文本的文本,您可以使用\[\[(.*?)\]\[(.*?)\]\],并将链接标记插入带有后引用的字符串中:

import re
re.sub('\[\[(.*?)\]\[(.*?)\]\]', r'<a href="\1">\2</a>', s)

# '  text before <a href="my.fake.web.address.com">link text</a> text after   '

答案 1 :(得分:4)

import re
s = '  text before [[my.fake.web.address.com][link text]] text after   '
#<a href="my.fake.web.address.com">link text</a>
tag = re.sub(r'\[\[(.+?)\]\[(.+?)\]\]', r'<a href="\1">\2</a>', s)

出:

 text before <a href="my.fake.web.address.com">link text</a> text after  

如果要重复使用sub中的文本,则应使用capture

  

(...)

     

匹配括号内的正则表达式,和   表示组的开始和结束;一组的内容可以   在执行匹配后检索,以后可以匹配   在带有\ number special sequenc e的字符串中,如下所述。

并确保使用'\'隐藏正则表达式中的关键字,例如\[\]以匹配真实[]

答案 2 :(得分:3)

要将假链接[[my.fake.web.address.com][link text]]替换为<a href="my.fake.web.address.com">link text</a>

,我会使用:

result = re.sub(r"\[\[([^]]+)]\[([^]]+)]]", r'<a href="\1">\2</a>', subject)

请注意,]不需要转义。

答案 3 :(得分:2)

一种方法

import re
mt = re.compile(r'.*\[\[(?P<www>.*)\]\[(?P<text>.*)\]\].*')
m = mt.match(s).groupdict()
output = '<a ref="{0}">{1}</a>'.format(m['www'], m['text'])

答案 4 :(得分:1)

import re

def getRegex(s, reg = ".\[\[(.+)\]\["):
    m = re.search(reg, s)
    return m.group(1)

s = "  text before [[my.fake.web.address.com][link text]] text after   "
print getRegex(s);

看看这个!

编辑:抱歉愚蠢,我猜你问这个。

def changeLinks(s, replStr = r'<a href="http://\1">\2</a>', reg = "\[\[(.+)\]\[(.+)\]\]"):
    r = re.sub(reg, replStr, s)
    return r

# text before <a href="http://my.fake.web.address.com">link text</a> 
print changeLinks(s);

干杯, RJ