Regex 匹配字母,后跟特定的数字范围

Regex 匹配字母,后跟特定的数字范围,regex,Regex,我正在编写一个正则表达式,其中字符串可以是2-3个字符。 第一个字符必须是a和H(大写)之间的字母表。此字符后面必须跟一个介于1和12之间的数字。 我写 当我键入A12时,这很好,但当我键入A6 请建议 您不能指定这样的数字范围,因为它是作为字符之间的范围来实现的,所以[1-12]相当于[12],它只能匹配1或2。相反,请尝试以下操作: [A-H](?:1[012]|[1-9]) \A[A-H](?:1[012]|[1-9])\z 下面是一个解释: [A-H] # one le

我正在编写一个正则表达式,其中字符串可以是2-3个字符。 第一个字符必须是a和H(大写)之间的字母表。此字符后面必须跟一个介于1和12之间的数字。 我写

当我键入
A12
时,这很好,但当我键入
A6


请建议

您不能指定这样的数字范围,因为它是作为字符之间的范围来实现的,所以
[1-12]
相当于
[12]
,它只能匹配
1
2
。相反,请尝试以下操作:

[A-H](?:1[012]|[1-9])
\A[A-H](?:1[012]|[1-9])\z
下面是一个解释:

[A-H]        # one letter from A to H
(?:          # start non-capturing group
   1[012]      # 1 followed by 0, 1, or 2 (10, 11, 12)
   |           # OR
   [1-9]       # one digit from 1 to 9
)            # end non-capturing group
请注意,原始正则表达式中
[A-H]
之后的
{1}
是不必要的,
[A-H]{1}
[A-H]
是等效的

您可能想考虑将锚点添加到正则表达式中,否则您也会得到一个字符串上的部分匹配,如<代码> A20。如果试图匹配整个字符串,则应使用以下命令:

[A-H](?:1[012]|[1-9])
\A[A-H](?:1[012]|[1-9])\z
如果它位于较大的文本中,则可以使用单词边界:

\b[A-H](?:1[012]|[1-9])\b

您不能指定这样的数字范围,因为它是作为字符之间的范围来实现的,所以
[1-12]
相当于
[12]
,它只能匹配
1
2
。相反,请尝试以下操作:

[A-H](?:1[012]|[1-9])
\A[A-H](?:1[012]|[1-9])\z
下面是一个解释:

[A-H]        # one letter from A to H
(?:          # start non-capturing group
   1[012]      # 1 followed by 0, 1, or 2 (10, 11, 12)
   |           # OR
   [1-9]       # one digit from 1 to 9
)            # end non-capturing group
请注意,原始正则表达式中
[A-H]
之后的
{1}
是不必要的,
[A-H]{1}
[A-H]
是等效的

您可能想考虑将锚点添加到正则表达式中,否则您也会得到一个字符串上的部分匹配,如<代码> A20。如果试图匹配整个字符串,则应使用以下命令:

[A-H](?:1[012]|[1-9])
\A[A-H](?:1[012]|[1-9])\z
如果它位于较大的文本中,则可以使用单词边界:

\b[A-H](?:1[012]|[1-9])\b
给你:

^[A-H]([1-9]|1[0-2])$
没有必要对你问题中的{1}进行修改

正则表达式以“^”和“$”锚定,这意味着它可能是您线路上唯一的东西。 它将不匹配A60,例如

^[A-H]([1-9]|1[0-2])$
没有必要对你问题中的{1}进行修改

正则表达式以“^”和“$”锚定,这意味着它可能是您线路上唯一的东西。
它将不匹配A60,例如

这是过度许可,因为它将允许(例如)
A90
A22
。这是过度许可,因为它将允许(例如)
A90
A22
。谢谢。在这种情况下,A12只是部分匹配。只有A1是匹配的@Ankur-我刚刚切换了交替顺序,所以现在应该可以正常工作了。您可能想考虑将锚点添加到正则表达式中,否则您也会在字符串上获得部分匹配,如<代码> A20。如果您试图匹配整个字符串,则应使用
\A[A-H](?:1[012]|[1-9])\z
,或者如果它位于较大的文本单词边界内,则可能会有所帮助:
\b[A-H](?:1[012]|[1-9])\b
请注意,如果您不锚定该正则表达式,它也会匹配,例如,如果我不添加锚定,A40中的A4不会是部分匹配?是的,它将部分匹配A4,这似乎不理想(取决于您的要求)。我在回答中使用了“^”和“$”,它们也是锚。谢谢。在这种情况下,A12只是部分匹配。只有A1是匹配的@Ankur-我刚刚切换了交替顺序,所以现在应该可以正常工作了。您可能想考虑将锚点添加到正则表达式中,否则您也会在字符串上获得部分匹配,如<代码> A20。如果您试图匹配整个字符串,则应使用
\A[A-H](?:1[012]|[1-9])\z
,或者如果它位于较大的文本单词边界内,则可能会有所帮助:
\b[A-H](?:1[012]|[1-9])\b
请注意,如果您不锚定该正则表达式,它也会匹配,例如,如果我不添加锚定,A40中的A4不会是部分匹配?是的,它将部分匹配A4,这似乎不理想(取决于您的要求)。我在回答中使用了“^”和“$”,它们也是锚。