正则表达式:匹配整个字符串的确切长度

4
我想匹配长度为3的字符串。我正在使用以下正则表达式:
("\\d?[A-Za-z]{2,3}\d?")

这里的字符串可以在开头或结尾有1个数字,或者字符串可以有3个字母。有没有办法定义匹配字符串的长度,例如:

("(\\d?[A-Za-z]{2,3}\d?){3}") // it does not work

我有另一个解决方案。

("(\\d[A-Za-z]{2})|([A-Za-z]{2}\\d)|([A-Za-z]{3})")

我只想知道是否有办法定义整个匹配字符串的长度。


我没有使用任何正则表达式工具。我正在Eclipse中编写Java程序,其中我正在使用正则表达式。 - Dinesh Choudhary
1
你能否使用“前瞻”(lookahead)?(?=^.{3}$)\d?[A-Za-z]{2,3}\d? 你的正则表达式看起来也可能被简化为[A-Za-z0-9][A-Za-z][A-Za-z0-9] - drf
我无法使用前瞻。但是折叠正则表达式可以正常工作。 - Dinesh Choudhary
2个回答

6
^.{3}$

如果这不是你真正需要的答案,你需要更明确地说明。你没有几个解决方案,而是零个。你想要匹配什么?请给出一些示例。

http://www.regexplanet.com/advanced/java/index.html

^(\d[a-zA-Z]{2}|[a-zA-Z]{2}\d|[a-zA-Z]{3})$  

如果您想要字母和数字的组合:

如果您希望字符串末尾的额外内容可以在不超出字符串范围的情况下实现,您只需查找其后面的空格即可。

^(\d[a-zA-Z]{2}|[a-zA-Z]{2}\d|[a-zA-Z]{3})\s

来自评论:

所以它就是

^[^\s]{3}\s\d{7}\s.\d{6}

? -- '^' 行首,'[^\s]' 非空格字符。 '{3}' 三个这样的字符。 '\s' 空格。 '\d' 数字。 '{7}' 七个数字。 '\s' 空格。 '.' 任意字符。 '\d' 六个这样的数字。

正则表达式基本上只是以编程方式描述你要查找什么的一种方式。如果你能正确地形成匹配的问题,就可以直接用正则表达式来写。


不,它没有起作用。我给你几个例子,实际上我想匹配的是这样的 - 'WDC 1234567L123456'或'4YL 1001101L110100'或'GH4 1234567L123456'。以前我使用了以下正则表达式 - ((\d?[A-Za-z]{2,3}\d?)\s\d{7}[A-Z]{1}\d{6})但是这个正则表达式也会匹配类似'ZN 1234567L123456'的字符串,所以我决定在空格之前定义字符串的长度,但我没有得到任何解决方案,所以最后我使用了((\d[A-Za-z]{2})|([A-Za-z]{2}\d)|([A-Za-z]{3}))\s\d{7}[A-Z]{1}\d{6}。它工作得很好,但我不想指定所有条件,只想指定长度。 - Dinesh Choudhary
@DineshChoudhary 你应该在原问题中更新这些示例。这样,可以更清楚地了解它们是什么以及您想匹配哪个部分。比描述您认为要匹配的内容更有帮助。 - Tatarize
唯一重要的问题似乎是你如何知道你想匹配的部分何时结束?当你有了这三个字符,接下来会发生什么?是一个空格吗?还是三个非空格字符后跟一个空格? - Tatarize
是的,有三个非空格字符后跟一个空格。我通过这个正则表达式找到了那个部分,它包括三个非空格字符,然后是一个空格,之后是七个数字,再接着一个字符和六个数字。 - Dinesh Choudhary
所以它是^[^\s]{3}\s\d{7}\s.\d{6}吗?-- '^' 行首,'[^\s]' 非空格。'{3}' 三个这样的字符。'\s' 空格。'\d' 数字。'{7}' 七个这样的数字。'\s' 空格。'.' 任意字符。'\d' 六个这样的数字。 - Tatarize

2

您的三个解决方案也将匹配更长的字符串。我建议您使用单词边界 (\b) 或行边界 (^$):

\b([a-zA-Z]{2}\d|\d[a-zA-Z]{2}|[a-zA-Z]{3})\b

或者

^([a-zA-Z]{2}\d|\d[a-zA-Z]{2}|[a-zA-Z]{3})$

根据具体用途而定。

编辑:已修正正则表达式,也匹配3位数字。


是的,你说得对,但我们能不能使用第一个解决方案(“\d?[A-Za-z]{2,3} \d?”)并定义它的长度呢?因为我不想使用这个解决方案,因为在其中我们必须定义所有条件,在这里我们有长度3,但如果长度更长怎么办。 - Dinesh Choudhary
嗯,我担心这样做会匹配长度为2到5的字符串,我不知道如何解决这个问题。 - LucaMus
那么,你提供的解决方案是你认为最好的吗? - Dinesh Choudhary
据我所知,是的,但我在正则表达式方面还很新。你可以等一下,看看是否有其他人有更聪明的方法来解决你的问题 ;) - LucaMus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接