我使用regex-applicative库。
我想删除后缀".end"但只有当它真的是一个后缀(字符串的尾部,而不是字符串的中间),并使用replace
replace (some anySym <* ".end") "start.end"
它工作:"start.end"→时">
但是不能使用"start.end.extra"→"start.extra"(我期待&;start.end.extra&;Result, because ".end"不是后缀more——它在中间)。
我试着:
replace (some anySym <* ".end" *> empty) "start.end"
replace (empty <* some anySym <* ".end" *> empty) "start.end"
和许多其他组合,但它没有像我期望的那样工作。是否可以使用此库删除后缀?
replace
用于查找字符串中正则匹配的所有位置,并用其他内容替换它们。你不想这样,所以不要用replace
。你有一个正则表达式定义你想要如何塑造整个字符串,所以match
正则表达式从匹配中获取信息:
stripEndSuffix :: String -> String
stripEndSuffix =
let findSuffix = match $ some anySym <* string ".end"
in fromMaybe <*> findSuffix