从字符串字符集的字母数字ID中排除“ I”和“ O”

时间:2019-12-12 16:37:10

标签: r regex stringi character-class

我从Generate unique alphanumeric IDs知道,我可以使用stringistri_rand_strings来生成唯一的字母数字ID。我试图找出一种有效的方法,但只包括数字0-9和除“ I”和“ O”之外的所有字母。我似乎无法弄清楚如何将其包含在模式c( LETTERS[c(1:8,10:14,16:26)],"[0-9]")

stri_rand_strings(25, 6)

2 个答案:

答案 0 :(得分:8)

修改模式以排除这些字母

stri_rand_strings(25, 6, pattern = "[a-zA-HJ-NP-Z0-9]")

[1] "l3e6eH" "NfcjuP" "vtHxWy" "bs2Zd1" "2UGWoJ" "GhettL" "mvvLqi" "AtBBnd" "ijsDFj" "4CXpn6" "MpyUEh" "HZUyDi" "Fba7Af"
[14] "M3lWdn" "A5Vf8D" "tcC9as" "jTXyK5" "U5gUCy" "rnQN1p" "vEouUF" "c8ZU35" "C91o7m" "vuM7iE" "dl49kM" "opucvl"

仅使用大写字母

stri_rand_strings(25, 6, pattern = "[A-HJ-NP-Z0-9]")

答案 1 :(得分:1)

一种更灵活的方法是使用称为ICU regex enginecharacter class subtraction功能。

要匹配IO以外的任何ASCII字母数字字符,请使用[[:alnum:]&\p{ASCII}-[IO]]正则表达式模式:

  • [-方括号表达式的开始:
    • [:alnum:]-匹配任何Unicode字母数字
    • &-和
    • \p{ASCII}-字母数字必须来自ASCII集
    • -[IO]-但IO字符
  • ]-方括号表达式的结尾。

最终解决方案如下

stri_rand_strings(25, 6, pattern = "[[:alnum:]&\\p{ASCII}-[IO]]")

我得到的输出:

[1] "7hWJdu" "cjvekt" "oPqg0C" "pK1JRi" "lrjB2G" "2Zjp0P" "bR7XcK" "V1i8XG" "hojuMU" "4fHpAP" "vSAHFP" "BTXabM" "RWQjaF" "Ac0VbH" "d4GXh1" "kAXWR5" "gx7rQX" "sRXmmw"
[19] "kXcb9H" "mJPuCL" "yBylmm" "wqCtUJ" "zgefj9" "1v6gYY" "l47wjf"