正则学习

正则使用当中用到的一些笔记:

匹配base64url的代码:

a='/item/%E4%BA%92%E8%81%94%E7%BD%91'
import re
b=re.match("/item/(%[A-Za-z0-9]{2})+",a)
if b is not None:
    print b.group()

结果:/item/%E4%BA%92%E8%81%94%E7%BD%91

匹配中文:

name='item/%E4%BA%92%你好E8%81%94%E7%BD%91'
name_=re.findall(u'[\u4e00-\u9fa5]+',unicode(name))
result = ''.join(name_)
print result

结果:你好

去掉所有空格、制表符、换行符:

filed=re.sub('\s','',fileds)

(.*?)含义:懒惰匹配

.是匹配除了\n的任意字符
*是匹配0次或多次前面出现的正则表达式
?是匹配之前字符的0个或者1个

(.*?)即匹配0个或者任意个不是\n的任意字符

a = '/item/%E4%BA%92%E8%81%94%E7%BD%91/item/'
b=re.match('/item/(.*?)/item/',a)
if b is not None:
    print b.group()

结果:/item/%E4%BA%92%E8%81%94%E7%BD%91/item/

在使用django的时候,(?P=name)

Matches whatever text was matched by the earlier group named name.
下面就简单解释解释此含义。

1.首先,使用此(?P=name)之前,在正则表达式中,必须之前已经有了名为name的带命名的group了,即有了类似的(?P)了,才可以用这个(?P=name)去匹配之前的(?P)部分的值。

2.此(?p=name)只是用来匹配,即只能适用于:re.search,re.match,re.find,re.findall等用来查询,匹配的正则表达式中。

而如果用于re.sub等被替换的字符中时,则是\g,而不是(?P=name),这点,不要搞混淆了。

再用文字描述一下就是:

re.sub(“用来查询的正则表达式,如果想要匹配前面已经命名的组(?Pxxx)中的xxx,此处用(?P=name)”,而被替换的内容的正则表达式中,如果想要获取前面的已经命名的组(?Pxxx)中的xxx,则是用\g”,需要处理的字符串”.

import re
reNamedGroupTestStr = u'标签:<a href="/tag/情侣电话粥/">情侣电话粥</a>';
foundTagA = re.search(u'.+?<a href="/tag/(?P<tagName>.+?)/">(?P=tagName)</a>', reNamedGroupTestStr);
print "foundTagA=", foundTagA;  # foundTagA= <_sre.SRE_Match object at 0x00876D60>

if (foundTagA):
    namedGroupStr = foundTagA.group("tagName");
    print "namedGroupStr=", namedGroupStr;  # namedGroupStr= 情侣电话粥

    group1Value = foundTagA.group(0);
    print "Group(0): group1Value=", group1Value;  # Group(1): group1Value= 情侣电话粥

    substitutedStr = re.sub(u'.+?<a href="/tag/(?P<tagName>.+?)/">(?P=tagName)</a>', u'所捕获的tag值为:\g<tagName>',
                            reNamedGroupTestStr);
    print "Original string=%s, after substituted=%s" % (reNamedGroupTestStr,
                                                        substitutedStr);  # Original string=标签:<a href="/tag/情侣电话粥/">情侣电话粥</a>, after substituted=所捕获的tag值为:情侣电话粥

参考

http://blog.csdn.net/feixuedongji/article/details/46422361
https://www.crifan.com/detailed_explanation_about_python_regular_express_match_named_group/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值