【问题标题】:How can I accomplish this regex?我怎样才能完成这个正则表达式?
【发布时间】:2020-09-29 13:19:36
【问题描述】:

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

例如它应该匹配A10A1E9

不应匹配A100A30P7A01

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

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

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

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

【问题讨论】:

标签: python-3.x regex regex-lookarounds python-re


【解决方案1】:

您可以使用范围缩短模式。然后,您可以使用交替匹配 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)

【讨论】:

  • 谢谢!是的,这个解决方案很聪明,正是我正在寻找的,不知道 /b。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
相关资源
最近更新 更多