isInfixOf并在字符串中查找字符串

时间:2012-03-30 11:45:27

标签: string haskell

我遇到的问题是我在下面的字符串上使用isInfixOf来检查我要查找的单词是否在字符串中,以下内容可以达到某个点。

> "world" `isInfixOf` "hello world"
True

但是,如果它是另一个单词的一部分,它仍然会返回TRUE,如下所示:

> "wor" `isInfixOf` "hello world"
True

我试图找出传入的单词是否在我正在寻找的字符串中,但它不是另一首歌的一部分。

我尝试了很多方法,但我不确定如何确保这个词不是另一个词的一部分。

WORDS不起作用,因为它不会删除它的punc字符串。

2 个答案:

答案 0 :(得分:8)

您可以使用其他方法。 words函数创建一个包含字符串中所有单词的字符串列表。 elem函数告诉某些内容是否属于列表。所以,你可以使用elem "world" (words "hello world")。还有其他涉及正则表达式的解决方案,但这个可能是最简单的。

答案 1 :(得分:0)

一些正则表达式包在这里可能会有所帮助。

例如,使用regex-prce-builtin

> :m + Text.Regex.PCRE
> "Hello world" =~ "\\bworld\\b" :: Bool
True
it :: Bool
> "Hello world" =~ "\\bwor\\b" :: Bool
False

\\b代表\b字边界,用于Perl正则表达式。

因此,我们可以使用isInfixOf定义新的(=~)模拟。

> let s `isInfixOf_` l = l =~ ("\\b" ++ s ++ "\\b") :: Bool
isInfixOf_ :: RegexLike Regex source1 => [Char] -> source1 -> Bool
> "wor" `isInfixOf_` "Hello world"
False
it :: Bool
> "world" `isInfixOf_` "Hello world"
True
it :: Bool