Regex 匹配字母,后跟特定的数字范围
我正在编写一个正则表达式,其中字符串可以是2-3个字符。 第一个字符必须是a和H(大写)之间的字母表。此字符后面必须跟一个介于1和12之间的数字。 我写 当我键入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
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,这似乎不理想(取决于您的要求)。我在回答中使用了“^”和“$”,它们也是锚。