【Python】【正则表达式】Python使用正则表达式匹配数字

目录

1. Python正则表达式匹配数字

2. 正则表达式限定符

3. 匹配数字的正则表达式实例

4. 使用正则表达式,获取东方财富股吧内容


1. Python正则表达式匹配数字

在 Python 中,可以使用正则表达式来匹配数字。

以下是一些常用的匹配数字的正则表达式:

1、匹配整数:^\d+$

- ^ 表示匹配字符串的开始位置。

- \d 表示匹配一个数字字符。

- + 表示匹配前面的字符一次或多次。

- $ 表示匹配字符串的结束位置。

2、匹配带正负号的整数:^[+-]?\d+$

- ? 表示前面的字符可选。

- [+-] 表示匹配加号或减号。

3、匹配浮点数:^[+-]?\d+(.\d+)?$

- () 表示将其中的内容视为一个整体。

- . 表示匹配小数点。

- ? 表示前面的内容可选。

2. 正则表达式限定符

限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有*或+或?或{n}或{n,}或{n,m}共6种。

*、+和?限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。

正则表达式的限定符有:

字符

描述

*

匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。

+

匹配前面的子表达式一次或多次。例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。

?

匹配前面的子表达式零次或一次。例如,”do(es)?” 可以匹配 “do” 或 “does” 中的”do” 。? 等价于 {0,1}。

{n}

n 是一个非负整数。匹配确定的 n 次。例如,’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。

{n,}

n 是一个非负整数。至少匹配n 次。例如,’o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。’o{1,}’ 等价于 ‘o+’。’o{0,}’ 则等价于 ‘o*’。

{n,m}

m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,”o{1,3}” 将匹配 “fooooood” 中的前三个 o。’o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。

示例代码1:

import re
 
s = 'a,b,,,,c d@E'
a = re.compile('[, ]+')
b = a.split(s)
print(a)
print(b)
 
c = re.compile('[,]+')
d = c.split(s)
print(d)

运行结果:

re.compile('[, ]+')
['a', 'b', 'c', 'd@E']
['a', 'b', 'c d@E']

3. 匹配数字的正则表达式实例

1.数字:^[0-9]*$
2.n位的数字:^\d{n}$
3.至少n位的数字:^\d{n,}$
4.m-n位的数字:^\d{m,n}$
5.零和非零开头的数字:^(0|[1-9][0-9]*)$
6.非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
7.带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$
8.正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
9.有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
10.有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
11.非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
12.非零的负整数:^\-[1-9][]0-9″*$ 或 ^-[1-9]\d*$
13.非负整数:^\d+$ 或 ^[1-9]\d*|0$
14.非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
15.非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
16.非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
17.正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
18.负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
19.浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

4. 使用正则表达式,获取东方财富股吧内容

#!/usr/bin/env python3
# _*_ coding : UTF-8 _*_
# 开发人员 :jly
# 开发时间 :2023/09/14 19:03:06
# 文件名称 :reptile_东方财富股吧.py
# 开发工具 :Visual Studio Code

import requests
import json
import re

def guba(url,headers,proxies):
    response = requests.get(url=url,headers=headers,proxies=proxies).content.decode('utf-8')
    pattern = re.compile(r'<ul class="newlist" tracker-eventcode="gb_xgbsy_ lbqy_rmlbdj">[\w\W]*?</ul>')
    list = pattern.findall(response)[0]
    li_pattern = re.compile(r'<li>([\d\D]*?)</li>')
    li_list = li_pattern.findall(list)
    gubalist = []

    for li in li_list:
        dict = {}
        pattern = re.compile(r'<cite>(.*?)</cite>',re.S)
        data = pattern.findall(li)
        print(data[0].strip())
        print(data[1].strip())
        dict["阅读量"] = data[0].strip()
        dict["评论数"] = data[1].strip()
        #名称
        pattern = re.compile(r'<span class="sub">.* class="balink">(.*?)</a>]')
        baname = pattern.findall(li)
        print(baname[0])
        dict["吧名称"] = baname[0]
        #标题
        pattern = re.compile(r'<a href=".* title="(.*?)"')
        title = pattern.findall(li)
        print(title[0])
        dict["标题"] = title[0]
        #作者
        pattern = re.compile(r'target="_blank"><font>(.*?)</font></a>')
        author = pattern.findall(li)
        print(author[0])
        dict["作者"] = author[0]
        #更新时间
        pattern = re.compile(r'</cite><cite class="last">(.*?)</cite>')
        time = pattern.findall(li)
        print(time[0])
        dict["更新时间"] = time[0]
        #详情url
        pattern = re.compile(r'<a href="(/news,.*?)"')
        url = pattern.findall(li)[0]
        full_url = 'http://guba.eastmoney.com'+url

        #获取详情页面的内容
        response = requests.get(url=full_url,headers=headers,proxies=proxies).content.decode('utf-8')
        pattren = re.compile(r'"post_content".*"([\d\D]*?),"post_publish_time"')
        content = pattren.findall(response)[0]
        pattern = re.compile(
            r'[\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b\u4e00-\u9fa5]+')
        text = pattern.findall(content)
        #返回文本格式
        content_text = ','.join(text)
        # dict["详情内容"] = content_text
        gubalist.append(dict)
        # i+=1
        # print(i, "====================")
    datajson = json.dumps(gubalist,ensure_ascii=False)
    with open ('guba.json','w',encoding='utf-8') as fp:
        fp.write(datajson)


if __name__ == '__main__':
    i = 0
    for i in range(1,30):
        url = 'http://guba.eastmoney.com/default,99_{}.html'.format(i)
        proxies = {'http': '', 'https': '58.253.157.232:9999'}
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36',
            'Cookie': '__cfduid=d45abc9c47821980f926a234bc1d141771574671242; PHPSESSID=1111adcbe2de581fc10d8912a9100db8; Hm_lvt_2b65b835db5cae63ad487fd29631b1c7=1574671306; Hm_lpvt_2b65b835db5cae63ad487fd29631b1c7=1574671306; UM_distinctid=16ea1b94f0f142-0edd2ae99214fd-54133310-100200-16ea1b94f108d2; CNZZDATA1000267376=387552791-1574669922-%7C1574669922'}
        guba(url,headers,proxies)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风云说通信

支持小编为您创造更多干货,谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值