1

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

3 回答 3

2

您可以使用

^(?=.{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+ 个字母。

于 2018-08-27T11:46:39.247 回答
1

使用以下正则表达式:

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

Regex101上的演示。

  • [a-z]*匹配数字前任意数量的 az 字符\d
  • [a-z]*?之后匹配任意数量的 az 字符。
  • (?<=^.{5}$)是一个积极的回顾 - 它确保在 start 和 end 之间正好有 5 个字符^.{5}$
于 2018-08-27T11:48:50.967 回答
0

使用 Perl:

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

输出 :

Total 4
于 2018-08-27T11:54:32.137 回答