检查 Python 字符串是否是有效的 Excel 单元格

jfa*_*oni 3 python string excel openpyxl

给定一些 Python 中的字母数字字符串,例如

  • A9
  • B44B
  • C101
  • 4D4

我如何检查字符串是否是有效的 Excel 单元格(即字母在数字之前)?

我试过用.isalpha.isdigit方法来“收集”字母和数字,然后用它.index来检查是否所有的字母都出现在数字之前,但是我的逻辑变得太复杂了,我觉得我没有考虑到所有的可能性。

有没有简单的方法来实现这一目标?

预期结果:

>>> is_valid_excel_cell('A9')
True
>>> is_valid_excel_cell('B44B')
False
>>> is_valid_excel_cell('C101')
True
>>> is_valid_excel_cell('4D4')
False
Run Code Online (Sandbox Code Playgroud)

Jvd*_*vdV 5

根据我的评论,有效性取决于 Excel 版本。较新版本的列范围为A-XDF和行从1-1048576。在您的项目中可能不需要它,但为了将来参考它可能很方便:

正则表达式模式: ^([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([1-9]\d{0,6})$

为了形象化:

正则表达式可视化

第一组捕获 Excel 2010 及更高版本的列引用,A-XDF第二组捕获数字部分,该部分应始终1-9以 0 到 6 个字符开头,但不能超过1048576

因此,您可以充分考虑:

import re
def is_valid_excel_cell(c):
    m = re.match(r'^([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([1-9]\d{0,6})$',c)
    return bool(m) and int(m.group(2)) < 1048577
Run Code Online (Sandbox Code Playgroud)