我有几个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解决方案?
答案 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