如何使用ApplicationRegex从字符串中删除后缀?

lpwwtiir  于 2023-04-07  发布在  其他
关注(0)|答案(1)|浏览(103)

我使用regex-applicative库。
我想删除后缀“.end”,但只有当它真的是一个后缀(字符串的尾部,而不是字符串中间的某个地方),并使用replace。

replace (some anySym <* ".end") "start.end"

它的工作原理是:“start.end”-〉“start”
但它不工作与“开始。结束。额外”-〉“开始。额外”(我希望“开始。结束。额外”的结果,因为“结束”不是一个后缀更多-它的中间)。
我试过:

replace (some anySym <* ".end" *> empty) "start.end"
replace (empty <* some anySym <* ".end" *> empty) "start.end"

和很多其他的组合,但它并不像我期望的那样工作。有没有可能用这个库删除一个后缀?

lx0bsm1f

lx0bsm1f1#

replace用于查找字符串中RE匹配的所有位置,并将其替换为其他内容。您不希望这样,所以不要使用replace。您有一个正则表达式定义了整个字符串的形状,因此match在该正则表达式上从匹配中获取信息:

stripEndSuffix :: String -> String
stripEndSuffix =
  let findSuffix = match $ some anySym <* string ".end"
  in fromMaybe <*> findSuffix

相关问题