过滤字母组合
Posted
技术标签:
【中文标题】过滤字母组合【英文标题】:Filtering letter combinatons 【发布时间】:2017-08-06 18:44:52 【问题描述】:您好 - 我正在为以下问题寻求帮助。 我有一个实用程序,可以为我提供一组字母(或值)的所有组合。这是 8 选择 n 的形式,即有 8 个字母,我可以为不超过 4 个字母的序列生成所有组合。所以 n 可以是 2、3 或 4
现在这里有点复杂:8 个字母由三个列表或组组成。因此,A,B,C,D;E1,E2;F1,F2
正如我所说,我可以毫无问题地获得所有 2、3 和 4 序列。但是我需要过滤它们,以便获得组合(或者更确切地说可以过滤结果),其中我只想要结果中的字母,以确保我(在 n=2 条件下)从 A、B、C、D 中获得至少一个一个来自 E 集或 F 集。
因此,举几个例子,其中 n=2
AE1 或 DF2… 正常,但 AB 或 E1E2 或 E1F1… 不正常
当 n=3 时,规则略有不同,但原理相同
ABE1、ABF1、BDF2 或 BE2F1… 正常,但 ABC、ABD、AE1E2、DF1F2 或 E1E2F1… 不正常。
同样,n=4
ABE1F1、ABE1F2… 正常,但 ABCD、ABE1E2、CDF1F2 或 E1E2F1F2… 不正常。
我使用不同的公式(例如 Match 和 Countif)尝试了一些事情,但无法完全弄清楚。因此,非常感谢您的帮助。
乔恩
【问题讨论】:
【参考方案1】:我一直在尝试找到一种解决这个问题的方法,以消除它的一些混乱。有两个因素让这件事处理起来有点尴尬
(a) Combination of single letters and bigrams (digrams?)
(b) Possibility of several different letters / bigrams at each position in the string.
可以通过将字母或二元组分为三组或三类来处理这两个问题
(1) Letters A-D - let's call this group L
(2) First pair of bigrams E1 & E2 - let's call this group M
(3) Second pair of bigrams F1 & F2 - let's call this group N.
然后我们可以列出允许的组组合,据我所知是这样的
对于 N=2
LM
LN
对于 N=3
LLM
LLN
LMN
对于 N=4
LLMN
(我不知道是否允许LLLM等,但可以添加这些)
我将做一个很大的假设,即 OP 中提到的实用程序不会生成像 AAAA 或 E1E1E1E1 这样的字符串,否则它将毫无用处,您最好从头开始。
所以你只需要一个看起来像这样的替代品
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A2,"A","L"),"B","L"),"C","L"),"D","L"),"E1","M"),"E2","M"),"F1","N"),"F2","N")
并在允许的模式列表中查找
=ISNUMBER(MATCH(B2,$D$2:$D$10,0))
并过滤查找值为 TRUE。
【讨论】:
非常感谢您关注此问题。我会检查一下,看看它是否在周末有效 - 看起来是在正确的范围内。 谢谢你,它对我的数据非常有效——你对无用组合的假设是正确的。不过,我现在需要做的是,因为它对所使用的字母非常具体,所以将它扩展到任何分组。所以,仍然有三个组(即导致LMN),如果不是ABC,我可能有PQX 或其他东西。其他组也采用同样的方法。 好的,这个想法基本上可行。使其更通用的主要症结在于 SUBSTITUTE 已经很长并且非常特定于您正在使用的符号集。如果您有最新版本的 Excel,您可以使用 TEXTJOIN 连接字母数组以更灵活地构建分类模式,这可能会容易一些。 当然,您可以将单元格引用放在 SUBSTITUTE 中,而不仅仅是文字,例如 SUBSTITUTE ...A2,X1,Y1),X2,Y2)... 其中 cols X 和 Y 包含值你想替换。 后一种方法效果很好(我之前因为尝试使用 SUBSTITUTE(A2, X1:Y2...) 形式而陷入困境......但无论如何,虽然少用会很好'SUBSTITUTE' 因为随着您添加更多内容而变得有点混乱,解决方案正是我所需要的。非常感谢您的帮助 - 以及最后的澄清。以上是关于过滤字母组合的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch高级搜索排序( 中文+拼音+首字母+简繁转换+特殊符号过滤)
求一个正则表达式,要求 数字,大写字母,小写字母,特殊字符 至少两种或两种以上组合的正则表达式。