我遇到的问题是我在下面的字符串上使用isInfixOf
来检查我要查找的单词是否在字符串中,以下内容可以达到某个点。
> "world" `isInfixOf` "hello world"
True
但是,如果它是另一个单词的一部分,它仍然会返回TRUE,如下所示:
> "wor" `isInfixOf` "hello world"
True
我试图找出传入的单词是否在我正在寻找的字符串中,但它不是另一首歌的一部分。
我尝试了很多方法,但我不确定如何确保这个词不是另一个词的一部分。
WORDS不起作用,因为它不会删除它的punc字符串。
答案 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