Python中为什么正则表达式匹配结果是空?
for i in range(1,10): s.append(i)
s [1, 2, 3, 4, 5, 6, 7, 8, 9] for i in range(-1,-3): s.remove(s[i])
s [1, 2, 3, 4, 5, 6, 7, 8, 9]
Python中为什么正则表达式匹配结果是空?
3 回复
正则匹配出空结果,通常是因为模式没对上。我直接给几个常见情况和代码示例:
情况1:match()只在字符串开头匹配
import re
text = "abc123def"
pattern = r"\d+" # 匹配数字
# match()只在开头找,所以这里返回None
result = re.match(pattern, text)
print(result) # None
# 改用search()或findall()
result = re.search(pattern, text)
print(result.group()) # "123"
result = re.findall(pattern, text)
print(result) # ['123']
情况2:模式太严格,没匹配到任何内容
import re
text = "价格是123元"
pattern = r"价格:\d+元" # 冒号是中文的,但文本里是"是"
result = re.search(pattern, text)
print(result) # None
# 修正模式
pattern = r"价格是\d+元"
result = re.search(pattern, text)
print(result.group()) # "价格是123元"
情况3:分组捕获时没拿到想要的部分
import re
text = "日期:2023-01-15"
pattern = r"日期:(\d{4})-(\d{2})-(\d{2})"
result = re.search(pattern, text)
if result:
print(result.group()) # "日期:2023-01-15" - 整个匹配
print(result.group(1)) # "2023" - 第一个分组
print(result.group(2)) # "01" - 第二个分组
print(result.group(3)) # "15" - 第三个分组
调试建议:
- 先用
re.findall()看看模式能匹配到什么 - 检查特殊字符是否需要转义(比如
.、*、+) - 注意贪婪匹配和非贪婪匹配的区别
总结:检查模式是否匹配字符串的实际内容。
-1,-3 ?
删除主要是 pop 吧
range(-1,-3) 必须要写成 range(-1, -3,-1), 或 range(-2, 0)

