Python3中的正则表达式问题:


1.让点可以匹配所有字符包括换行符

    reg=re.compile(r'(?<= id=\"content\">).*?(?=</div>)', re.S)

    text=re.findall(reg,html )

2. 精确匹配和最小匹配
‘{m}’      精确匹配m次
‘{m,n}’   匹配最少m次,最多n次。(n>m)
    如果你只想指定一个最少次数或只指定一个最多次数,你可以把另外一个参数空起来。比如你想指定最少3次,可以写成 {3,}     (注意那个逗号),同样如果只想指定最大为5次,可以写成{,5},也可以写成{0,5}。

3.‘*?’ ‘+?’ ‘??’ 最小匹配

‘*’ ‘+’ ‘?’:0/多;1/多;0/1

4. 1 前向界定与后向界定

(?<=…) 前向界定    (?=…)  后向界定:参数字符串必须定大小
        >>> s=r'/*djwehfunj*/'
        >>> re.findall( r’(?<=/\*).+?(?=\*/)’ , s )            #'djwehfunj'
例:在下面的字符串中想找到被字母夹在中间的数字,你不可以用前向界定:
        >>> s = ‘aaa111aaa , bbb222 , 333ccc ‘
        
 >>> re.findall( r’(?<=[a-z]+)\d+(?=[a-z]+)' , s )     # ERROR错误信息:error: look-behind requires fixed-width pattern    
    不过如果你只要找出后面接着有字母的数字,你可以在后向界定写正则式:
        >>> re.findall( r’\d+(?=[a-z]+)’, s )            #['111', '333']
    如果你一定要匹配包夹在字母中间的数字,你可以使用组(group)的方式
        >>> re.findall (r'[a-z]+(\d+)[a-z]+' , s )            #['111']


4.2前向非界定和后向非界定

(?<!...)  前向非界定            #只有当你希望的字符串前面不是’…’的内容时才匹配
(?!...) 后向非界定                #只有当你希望的字符串后面不跟着’…’内容时才匹配。

    匹配后面不跟着字母的数字
            >>> re.findall( r’\d+(?!\w+)’ , s )            #['222']
            >>> re.findall( r’\d+(?![a-z]+)’ , s )                #['11', '222', '33']

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值