You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则匹配字符串中括号内数字:输入查询返回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?

原代码有两个致命问题:

  1. 未转义正则特殊字符:输入中的(和)是正则的分组语法符号,直接放到模式里会被解析为分组标记,而非字面量的括号,导致无法匹配目标字符串里的(2023)。
  2. 空格替换逻辑错误:把空格替换成.*[\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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:10:36