Python如何用正则提取括号内纯数字?匹配返回None问题求解
问题根因
你使用的正则\(([0-9]+)\)要求括号内仅包含纯数字,但实际提取到的节点文本括号内为247540/매수,数字后还有斜杠、韩文等其他字符,无法匹配到闭合的右括号,因此返回None。
修正方案
调整正则表达式,仅捕获左括号后紧跟的连续数字即可,无需强制匹配到右括号:
# 调整后的正则,捕获左括号后的第一串连续数字 result = re.search(r"\((\d+)", link.text) # 增加非空判断,避免空值调用方法报错 if result: print(result.group(1), link.text) else: print("未匹配到目标数字")
如果要更严谨,确保匹配的数字确实在括号范围内,可以使用如下正则:
result = re.search(r"\((\d+)[^)]*\)", link.text)
完整修正代码
import requests from bs4 import BeautifulSoup import re url = r"https://securities.miraeasset.com/bbs/board/message/list.do?categoryId=1545" response = requests.get(url) if response.status_code == 200: html = response.text soup = BeautifulSoup(html, "lxml") link = soup.select_one("#bbsTitle0") href = link.get("href")[16:-1].replace("'", "") arr = list(map(int, href.split(","))) linkPage = r"https://securities.miraeasset.com/bbs/board/message/view.do?messageId={0}&messageNumber={1}&messageCategoryId=0&startId=zzzzz~&startPage=1&curPage=2&searchType=2&searchText=&searchStartYear=2020&searchStartMonth=09&searchStartDay=10&searchEndYear=2021&searchEndMonth=09&searchEndDay=10&lastPageFlag=&vf_headerTitle=&categoryId=1545".format( arr[0], arr[1] ) # 修正正则匹配逻辑 result = re.search(r"\((\d+)", link.text) if result: print(result.group(1), link.text) else: print("未匹配到目标数字")
内容的提问来源于stack exchange,提问作者박형렬
相关产品推荐
相关产品推荐

