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

Python循环用正则处理Excel报错:re.Pattern不可迭代

解决TypeError: argument of type 're.Pattern' is not iterable错误

这个错误的核心原因是你把编译后的正则re.Pattern对象当成了可迭代对象(比如用在for循环、in判断里),但Pattern本身不能直接迭代,必须调用它的匹配方法来处理文本。

常见错误代码示例

你可能写了类似这样的错误代码:

import openpyxl
import re

pattern = re.compile(r'Microsoft\..+')
wb = openpyxl.load_workbook('file.xlsx')
ws = wb.active

for row in ws.iter_rows():
    cell = row[1]
    # 错误:直接把pattern用在in判断里
    if pattern in cell.value:
        row[0].value = cell.value

修正方案:调用正则匹配方法

使用pattern.match()(从字符串开头匹配)或pattern.search()(在字符串任意位置匹配)来检查内容是否符合规则,或者用pattern.findall()提取所有匹配项。

方案1:匹配单个内容并复制到左侧列

适合每个单元格只包含一个目标内容的场景:

import openpyxl
import re

# 编译正则表达式,匹配以Microsoft.开头的内容
pattern = re.compile(r'Microsoft\..+')

# 加载工作簿和工作表
wb = openpyxl.load_workbook('your_excel_file.xlsx')
ws = wb.active  # 或者指定具体工作表:ws = wb['Sheet1']

# 遍历所有行(假设从第2行开始,第1行是表头)
for row in ws.iter_rows(min_row=2):
    # 假设检查第2列(B列)的内容,复制到第1列(A列)
    source_cell = row[1]
    target_cell = row[0]
    
    if source_cell.value is not None:
        # 检查单元格内容是否匹配正则
        if pattern.match(source_cell.value):
            target_cell.value = source_cell.value

# 保存处理后的工作簿
wb.save('processed_excel_file.xlsx')

方案2:提取单元格内所有匹配项并写入左侧列

如果一个单元格里有多个Microsoft.*格式的内容,可以用findall提取所有匹配结果,逐行写入左侧列:

import openpyxl
import re

pattern = re.compile(r'Microsoft\.[a-zA-Z0-9]+')

wb = openpyxl.load_workbook('your_excel_file.xlsx')
ws = wb.active

# 初始化左侧列的写入起始行
target_row = 2

for row in ws.iter_rows(min_row=2, max_col=2):
    source_cell = row[1]
    if source_cell.value is not None:
        # 提取所有匹配的内容
        matches = pattern.findall(source_cell.value)
        for match in matches:
            # 写入左侧第1列(A列)
            ws.cell(row=target_row, column=1).value = match
            target_row += 1

wb.save('processed_excel_file_multiple.xlsx')

关键修正点

  • 不要直接使用pattern对象进行迭代或in判断,必须通过match()、search()或findall()方法来处理文本内容。
  • 如果需要更宽松的匹配(比如不区分大小写),可以在编译正则时加上re.IGNORECASE参数:pattern = re.compile(r'microsoft\..+', re.IGNORECASE)

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:42:26