我怎样才能完成这个正则表达式?
How can I accomplish this regex?
我想要一个匹配从 A-J 行到 1-10 列的“单元格”值的正则表达式。
例如它应该匹配 A10
, A1
, E9
不应该匹配 A100
、A30
、P7
、A01
暂时,我想出了这个正则表达式:
(?:[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
一个单词边界
左右有空白边界:
(?<!\S)[A-Ja-j](?:10|[1-9])(?!\S)
我想要一个匹配从 A-J 行到 1-10 列的“单元格”值的正则表达式。
例如它应该匹配 A10
, A1
, E9
不应该匹配 A100
、A30
、P7
、A01
暂时,我想出了这个正则表达式:
(?:[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
一个单词边界
左右有空白边界:
(?<!\S)[A-Ja-j](?:10|[1-9])(?!\S)