我需要正则表达式来计算长度为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
答案 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