正则匹配字符串中括号内数字:输入查询返回None问题求助
问题分析与解决
问题描述
需求:搜索字符串中括号内的任意数字。
当前实现通过Python接收用户输入的关键词(示例输入:this year (2023)),用正则匹配目标字符串,但输出结果为None,代码如下:
import re String_1 ='this year (2023) we will complete this project' query=str(input('enter name: ' )) #假设输入是 "this year (2023)" raw_pattern = query.replace(' ', r'.*[\s\.\+\-_]') regex = re.compile(raw_pattern, flags=re.IGNORECASE) cursor = regex.search(String_1) print(cursor)
为什么输出None?
原代码有两个致命问题:
- 未转义正则特殊字符:输入中的
(和)是正则的分组语法符号,直接放到模式里会被解析为分组标记,而非字面量的括号,导致无法匹配目标字符串里的(2023)。 - 空格替换逻辑错误:把空格替换成
.*[\s\.\+\-_]后,输入会被转换成this.*[\s\.\+\-_]year.*[\s\.\+\-_](2023)。这个模式要求year后匹配任意字符直到遇到[\s\.\+\-_]类字符,再匹配2023,但原字符串中year之后是(,和模式里的2023完全不匹配,直接导致匹配失败。
修正方案
方案一:适配用户输入的匹配逻辑
如果需要基于用户输入的关键词匹配目标字符串,同时提取括号内的数字,可按以下方式修改:
import re String_1 ='this year (2023) we will complete this project' query = input('enter name: ') # 示例输入:this year (2023) # 1. 转义输入中的正则特殊字符(比如括号) escaped_query = re.escape(query) # 2. 把转义后的空格替换为匹配任意空白字符的模式(兼容多空格/制表符等) raw_pattern = escaped_query.replace(r'\ ', r'\s*') regex = re.compile(raw_pattern, flags=re.IGNORECASE) cursor = regex.search(String_1) if cursor: print("匹配到的内容:", cursor.group()) # 从匹配结果中提取括号内的数字 num_match = re.search(r'\((\d+)\)', cursor.group()) if num_match: print("括号内的数字:", num_match.group(1)) else: print("未匹配到内容")
方案二:直接提取目标字符串中所有括号内的数字
如果核心需求只是提取目标字符串里括号内的数字,不需要用户输入关键词,可简化为:
import re String_1 ='this year (2023) we will complete this project' # 匹配所有括号内的数字 matches = re.findall(r'\((\d+)\)', String_1) print("括号内的数字:", matches)
输出结果:括号内的数字: ['2023']
内容的提问来源于stack exchange,提问作者Sameer
相关产品推荐
相关产品推荐

