首页 > 解决方案 > 在正斜杠之前删除反斜杠

问题描述

上下文: GoogleBooks API 正在返回意外的缩略图网址

好的,所以我找到了我在那个问题中遇到的问题的原因

我发现从 googlebooks api 返回的 url 是这样的:

http:/\/books.google.com\/books\/content?id=0DwKEBD5ZBUC&printsec=frontcover&img=1&zoom=5&source=gbs_api

转到那个 url 会返回一个错误,但是如果我用“/”替换了“\ /”,它将返回正确的 url

是否有类似 java/kotlin 正则表达式的东西可以将其更改http:/\/books.google.com\/为这个http://books.google.com/ (我在 python 中知道一些正则表达式,但我在 java/kotlin 中一无所知)

谢谢你

标签: javaregexkotlin

解决方案


您可以使用三引号字符串文字(充当原始字符串文字,其中反斜杠被视为文字字符而不是字符串转义序列的一部分) + kotlin.text.replace

val text = """http:/\/books.google.com\/books\/content?id=0DwKEBD5ZBUC&printsec=frontcover&img=1&zoom=5&source=gbs_api"""
print(text.replace("""\/""", "/"))

输出:

http://books.google.com/books/content?id=0DwKEBD5ZBUC&printsec=frontcover&img=1&zoom=5&source=gbs_api

请参阅Kotlin 演示

注意:您需要将常规字符串文字中的反斜杠加倍:

print(text.replace("\\/", "/"))

如果您需要在正则表达式中使用这种“反斜杠 + 斜杠”模式,您将需要在三引号字符串文字中使用 2 个反斜杠,在常规字符串文字中使用 4 个反斜杠:

print(text.replace("""\\/""".toRegex(), "/"))
print(text.replace("\\\\/".toRegex(), "/"))

注意:没有必要/在 Kotlin 正则表达式声明中转义正斜杠,因为它不是特殊的正则表达式元字符,并且 Kotlin 正则表达式是用字符串文字定义的,而不是正则表达式文字,因此不需要正则表达式分隔符(/通常用作正则表达式支持此表示法的环境中的分隔符字符)。


推荐阅读