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"   - 第三个分组

调试建议:

  1. 先用 re.findall() 看看模式能匹配到什么
  2. 检查特殊字符是否需要转义(比如 .*+
  3. 注意贪婪匹配和非贪婪匹配的区别

总结:检查模式是否匹配字符串的实际内容。


-1,-3 ?
删除主要是 pop 吧

range(-1,-3) 必须要写成 range(-1, -3,-1), 或 range(-2, 0)

回到顶部