我怎样才能完成这个正则表达式?

How can I accomplish this regex?

我想要一个匹配从 A-J 行到 1-10 列的“单元格”值的正则表达式。

例如它应该匹配 A10, A1, E9

不应该匹配 A100A30P7A01

暂时,我想出了这个正则表达式: (?:[ABCDEFGHIJabcdefghij][123456789](?![123456789]))(?<=1)(0)?

唯一失败的情况是当你给它一个 A100 单元格时,它匹配前两个字符,而实际上它不应该 return 匹配。

编辑: 玩了一会儿,我写道: (?

这似乎适用于大多数情况。我仍然愿意接受有关如何改进它/更优雅地编写它的建议。

您可以使用范围缩短模式。然后你可以使用交替来匹配 10 或 1-9,而不是使用 (?<=1)(0)? 来匹配 10.

为防止部分匹配,您可以使用单词边界。

\b[A-Ja-j](?:10|[1-9])\b
  • \b一个单词边界
  • [A-Ja-j] 匹配 A-J 或 a-j
  • 范围内的任一字符
  • (?:10|[1-9]) 匹配 10 或单个数字 1-9
  • \b一个单词边界

Regex demo


左右有空白边界:

(?<!\S)[A-Ja-j](?:10|[1-9])(?!\S)