正则表达式查找字符串的最后一个字符[重复]
Posted
技术标签:
【中文标题】正则表达式查找字符串的最后一个字符[重复]【英文标题】:Regex to find last character of string [duplicate] 【发布时间】:2021-07-29 10:33:06 【问题描述】:我想验证一个字符串
AB000A1B
BC222B2P
条件:
字符串长度应大于 7 前两个字符必须是字母 索引 2,3,4 处的字符应为数值// 0 based index
字符串的最后一个字符应该是字母(仅限 B、P、J 中的任何一个)
我使用了以下代码,但它只能将前两个字符验证为字母,然后将 3 个字符净为数值,如何验证字符串的最后一个字符是否为 B、P、J 中的任何一个或如何我可以在所列条件下实现改进的模式吗?
if (inputString.Length > 7)
string pattern = "^[a-zA-Z]2[0-9]2[B|P|J]$";
Regex rgx = new Regex(pattern);
if (rgx.IsMatch(inputString))
【问题讨论】:
您指定了三个数字,但在您的模式中有2
并且您在它们和最后一个字符之间没有任何内容,例如.*
匹配之间的字符。像regexstorm.net/tester 这样的在线正则表达式测试人员非常适合制作正则表达式原型。
如果字符串长度为 10,前 2 个字符是 alpha,后 3 个是数字,最后一个字符是 B、P 或 J,这是否意味着其他字符可以是任何字符?
这能回答你的问题吗? regex match last character
【参考方案1】:
你几乎就在那里 - 除了两个小错误。
string pattern = @"^[a-zA-Z]2[0-9]3.+[BPJ]$"
这应该是诀窍。说明:
^[a-zA-Z]2
- 字符串的开头,后跟两个字母
[0-9]3
- 三个数字字符在位置 2,3,4(不是两个)
.+
- 任意数量的字符,但至少一个 - 您没有为此部分指定任何限制。可能你想改用[a-zA-Z0-9]+
[BPJ]$
- 大写字母 B、P 或 J,后跟字符串结尾。在您的版本中,AB000A1|
也会匹配。
由于部件的大小,长度要求是隐式执行的:2 + 3 + 1 或更多 + 1 = 7 或更多。
编辑
我将“大于 7”误读为“至少 7”。在这种情况下,模式必须是@"^[a-zA-Z]2[0-9]3.2,[BPJ]$"
,正如永顺指出的那样。
【讨论】:
嗨@Franz,无论如何,您的解决方案仍然有效,因为在满足字符串长度时会发生正则表达式检查(通过if
语句)。无论如何,想给一个“大拇指”以提供可靠的解决方案和解释。 =)
@YongShun 好吧,你已经得到了我纠正错误的支持
知道了,谢谢。 +1 解释,以便相关案例能够理解。【参考方案2】:
作为@Franz 回答的延伸
要强制您的输入文本必须满足以下要求:
前 2 个字符必须是字母 接下来的 3 个字符必须是数字 最后一个字符必须是 B 或 P 或 J 输入字符串的长度必须超过 7 个字符您可以应用下面的正则表达式:
string pattern = @"^[a-zA-Z]2[0-9]3.2,[BPJ]$";
.2,
表示匹配任何字符最少2次及以上。
您的正则表达式组将由:
-
任何长度为:2的字母字符
长度为 3 的任意数字字符
最小长度的任何字符:2
最后一个字符必须是(B 或 P 或 J),长度为:1
加上所有这些长度 (2 + 3 + 2 + 1 = 8 > 7)
一个有效的输入必须需要 8 个字符 + 满足上面的正则表达式组。
因此,不再需要您的 if
语句来检查字符串长度必须超过 7 个字符。
Regex & Sample test data
【讨论】:
以上是关于正则表达式查找字符串的最后一个字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章