haskell 如何过滤String中的Integer而不过滤该String中的所有Integer?

xeufq47z  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(151)

我知道函数:

numbers xs = filter (\x -> x `elem` [0..9]) xs

示例:numbers "123Text321"-〉123321
我不想过滤掉String中的所有整数,只想过滤掉第一个集合("123")。
如果一个函数只从它看到的字符串中获取第一个整数,并且一旦它到达一个字符串,它就返回它找到的整数,那么它需要什么呢?
再举一个例子:numbers "b123w321"-〉应返回123

oxiaedzo

oxiaedzo1#

您可以将takeWhileisDigit结合使用:

import Data.List(takeWhile)
import Data.Char(isDigit)

numbers = takeWhile isDigit

您的尝试没有成功,因为filter根据其定义遍历了整个列表,并且不知道遍历的进度(它不会告诉我们在看到非数字后应该停止)。
另一个问题是,整数在Haskell中不是字符,所以应该查找'0'..'9'而不是0..9

相关问题