【问题标题】:search a text in another text with the characters in the same order用相同顺序的字符在另一个文本中搜索一个文本
【发布时间】:2026-01-19 21:00:02
【问题描述】:

我想搜索一个文本(“needle”),如果它存在于另一个文本(“haystack”)中,满足以下两个条件:

  1. 'needle' 的所有字符必须在 'haystack' 中以相同的顺序
  2. 'haystack' 中的 'needle' 的后续字符之间可以有任意且无限的其他字符

例子:

  • abcde 中的 cde --> 是的
  • cde in ab-c-de --> 是的
  • cabecd 中的 cde --> FALSE
  • c-d!a+b5ce 中的 cde --> 是的
  • edc 中的 cde --> FALSE

此外,'cde' 不是一个常量字符串,而是一个迭代列表的变量。

python、R 或 bash 中的任何优雅解决方案都将不胜感激。

【问题讨论】:

    标签: text-search


    【解决方案1】:

    我可以建议您像这样使用动态生成的正则表达式:

    /.*c.*d.*e.*/
    

    【讨论】:

    • 听起来不错,但忘了说 'cde' 将是一个变量,而不是一个常量字符串。
    • 当然,如果你想要它更快,你可以简单地遍历 'needle' 的字符,将它们与字符串中的字符进行比较。
    • 即“动态生成”的意思,每次搜索前都要准备正则表达式。
    • 迭代伪代码(手机写):pattern='cde' string='qqqcaaadzzzexxx' j=0 found = false for(i=0; i++; string.eol) { if (string[i]==pattern[j] ) { j++ next } if (j>pattern.eol) { found = true break } }
    【解决方案2】:
    【解决方案3】:

    我在 python 中得到了解决方案:

    re.match('.*'+'.*'.join(list(needle))+'.*',(haystack)) 
    

    【讨论】:

      最近更新 更多