如何查找所有长度为5的字符串,这些字符串恰好包含一个数字和4个字母

时间:2018-08-27 11:40:10

标签: regex

我需要正则表达式来计算长度为5的字符串,这些字符串包含恰好一个数字(0-9)和4个字母(a-z)。

我仅能找到带有^[a-z]{5}$的字母,但我不知道我能否告诉它找到正好有一个数字的字符串。

例如:

jlwk6    -> one number
bjkgp
5fm8s
x975t
k88q5
zl796
qm9hb    -> one number
h6gtf    -> one number
9rm9p
jwzw2    -> one number

Total: 4

3 个答案:

答案 0 :(得分:2)

您可以使用

^(?=.{5}$)[a-z]*\d[a-z]*$

请参见regex demo

详细信息

  • ^-字符串的开头
  • (?=.{5}$)-字符串中必须有5个字符(换行符除外)
  • [a-z]*-0 +小写ASCII字母
  • \d-一个数字
  • [a-z]*-0 +小写ASCII字母
  • $-字符串的结尾。

要将解决方案扩展到N位,请使用

^(?=.{5}$)[a-z]*(?:\d[a-z]*){N}$

在这里,[a-z]*(?:\d[a-z]*){N}将匹配0+个字母,然后匹配N个出现的数字,后跟0+个字母。

答案 1 :(得分:1)

使用以下正则表达式:

^[a-z]*\d[a-z]*?(?<=^.{5}$)

演示在Regex101

  • [a-z]*与数字\d之前的任意多个a-z字符匹配。
  • [a-z]*?之后匹配任意数量的a-z字符。
  • (?<=^.{5}$)是一个积极的回顾-确保^.{5}$的开始和结束之间完全有5个字符。

答案 2 :(得分:0)

使用Perl:

$ perl -lne '
    $count = () = /\d/g;
    $gc += $count if $count == 1;
    END{print "Total $gc"}
' file

输出:

Total 4