【发布时间】:2022-01-20 17:57:25
【问题描述】:
我有一个较长的列表,其元素是多字符符号,例如:
@c = qw(iim v7 v7 iM iv7 iM im iv7 iv7 bviiM im biio iim bviim biiM biim bviM bviM ivm iih v7 v7 v7 iiim iiih vi7 iim v7 v7 iM iv7 iM im iv7 bviiM im biio iim bviim bviim iio iim v7 v7 v7 vm i7 ivM iiih vi7);
我想在此列表中找到与 S1+ S2+ S3+ 类型的子列表匹配的索引,其中“+”表示匹配一次或多次。因此,例如,子列表模式(im iv7 bviiM) 将匹配(im iv7 iv7 bviiM) 和(im iv7 bviiM),如上面以粗体突出显示的那样。该代码将为第一个匹配提供索引 6、7、8、9,为第二个匹配提供 32、33、34。
从表面上看,这似乎不应该是困难的,我已经尝试用各种方法来实现它,包括正则表达式,但到目前为止它已经打败了我。如果有一种简单的方法可以做到这一点,我将不胜感激。
【问题讨论】:
-
您是否考虑过,如果您对主列表进行重复数据删除(例如运行
uniq),然后将其转换为字符串,您可以执行常规正则表达式匹配,甚至是index子串? -
@TLP 好主意,但你不能告诉索引(重复的索引会丢失)
-
@TLP(但话又说回来,可以在我的答案中添加欺骗和粘贴索引)
标签: perl