我需要正则表达式来计算长度为 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
我需要正则表达式来计算长度为 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
您可以使用
^(?=.{5}$)[a-z]*\d[a-z]*$
查看正则表达式演示
细节
^- 字符串的开始(?=.{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+ 个字母。
使用以下正则表达式:
^[a-z]*\d[a-z]*?(?<=^.{5}$)
Regex101上的演示。
[a-z]*匹配数字前任意数量的 az 字符\d。[a-z]*?之后匹配任意数量的 az 字符。(?<=^.{5}$)是一个积极的回顾 - 它确保在 start 和 end 之间正好有 5 个字符^.{5}$。使用 Perl:
$ perl -lne '
$count = () = /\d/g;
$gc += $count if $count == 1;
END{print "Total $gc"}
' file
Total 4