正则表达式查找字符串的最后一个字符[重复]

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

【讨论】:

以上是关于正则表达式查找字符串的最后一个字符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式工具(上)

从正则表达式匹配中删除最后一个字符[重复]

正则表达式在匹配字符串之后查找最大数字的最后一次出现

用于查找html标签的正则表达式[重复]

无法使用 Java 正则表达式匹配字符串的最后部分 [重复]

Shell脚本 正则表达式 grep sed awk 工具