【问题标题】:Regex search string contains with specific count of letter正则表达式搜索字符串包含特定数量的字母
【发布时间】:2021-01-21 20:48:40
【问题描述】:

我正在尝试使用正则表达式来搜索满足不按特定顺序排列的字母数的字符串

如:

AAABBBCCCDDD
BBBAAADDDCCC
CCCAAABBBDDD

是真的:

到目前为止,我已经得到A{3}B{3}C{3}D{3} 将匹配第一行,但对于其他行将需要不同的顺序。

有什么好的解决方案可以解决吗?

【问题讨论】:

  • 什么是正则表达式库? 。网? PCRE?
  • 如果您想查看替代解决方案,请参阅related question 中的更多信息。
  • 你想匹配一个DDDDDDDDDDDD字符串吗?
  • 我正在使用 Python
  • 在某些时候是的,但不是这个问题

标签: regex


【解决方案1】:

您可以匹配并捕获一个字母,然后反向引用该捕获的字符。根据需要重复整个过程多次,这里看起来是 4:

(?:([A-Z])\1{2}){4}

https://regex101.com/r/vrQVgD/1

如果同一个字符不能多次作为一个序列出现,我认为这不能以这种 DRY 方式完成,您需要单独的捕获组:

([A-Z])\1{2}(?!\1)([A-Z])\2{2}(?!\1|\2)([A-Z])\3{2}(?!\1|\2|\3)([A-Z])\4{2}

https://regex101.com/r/vrQVgD/2

这基本上是以下变体中的 4 个:

(?!\1|\2|\3)([A-Z])\4{2}

(?!\1|\2|\3) 检查下一个字符是否未出现在任何先前匹配的捕获组中。

【讨论】:

  • 我可能必须搜索具有不同计数的字母,而不是全部搜索 4 个。还可能需要找到一个包含 40 多个不同计数的不同字符的字符串。
  • 如果它们是动态的,如果你想要 DRY 代码,我认为单独的正则表达式可能不是正确的方法。您可以使用findAll 匹配(任何)连续字符序列,然后以编程方式遍历匹配项。
猜你喜欢
  • 2015-04-10
  • 1970-01-01
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
相关资源
最近更新 更多