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)
作者:风云说通信