我试图在我的输入中删除字符串{“$ outer”:{},(从大括号开始并以逗号结尾)但我无法做到。
我的输入如下
{"$outer":{},"size":"10","query":{"$outer":{},"match":{"$outer":{},"_all":{"$outer":{},"query":"VALLE","operator":"and"}}}}
我尝试了以下方法,但两者都没有帮助我。
第一种方法:
val dropString = "\"$outer\":{},"
val payLoadTrim = payLoadLif.dropWhile(_ == dropString).reverse.dropWhile(_ == dropString).reverse
这个没有做任何事情。这是输出:
{"$outer":{},"size":"10","query":{"$outer":{},"match":{"$outer":{},"_all":{"$outer":{},"query":"VALLE","operator":"and"}}}}
第二种方法:
def stripAll(s: String, bad: String): String = {
@scala.annotation.tailrec def start(n: Int): String =
if (n == s.length) ""
else if (bad.indexOf(s.charAt(n)) < 0) end(n, s.length)
else start(1 + n)
@scala.annotation.tailrec def end(a: Int, n: Int): String =
if (n <= a) s.substring(a, n)
else if (bad.indexOf(s.charAt(n - 1)) < 0) s.substring(a, n)
else end(a, n - 1)
start(0)
}
第二个输出:
size":"10","query":{"$outer":{},"match":{"$outer":{},"_all":{"$outer":{},"query":"VALLE","operator":"
和期望的输出:
{"size":"10","query":{"match":{"_all":{"query":"VALLE","operator":"and"}}}
答案 0 :(得分:3)
您可能想要使用val input = """{"$outer":{},"size":"10","query":{"$outer":{},"match":{"$outer":{},"_all":{"$outer":{},"query":"VALLE","operator":"and"}}}}"""
input.replace("\"$outer\":{},", "")
:
{"size":"10","query":{"match":{"_all":{"query":"VALLE","operator":"and"}}}}
返回:
except OSError as e:
fixed_image_bytes = image_stream.getvalue() + b'\xff\xd9'
with io.BytesIO(fixed_image_bytes) as fixed_image_stream:
image = Image.open(fixed_image_stream)
image.load()
答案 1 :(得分:0)
如果您需要切断确切的前缀/后缀,可以使用.stripPrefix
/ .stripSuffix
方法:
@ "abcdef".stripPrefix("abc")
res: String = "def"
@ "abcdef".stripSuffix("def")
res: String = "abc"
请注意,如果字符串没有这样的前缀(或后缀),它将保持不变:
@ "abcdef".stripPrefix("foo")
res: String = "abcdef"
@ "abcdef".stripSuffix("buh")
res: String = "abcdef"
有时候从开头(或结束)切断是很重要的,所以如果你使用.replace
时,你应该小心并将^...
(或...$
)添加到正则表达式模式,否则它可能会在中间某处找到匹配并替换它。
奖励:如果您只想检查字符串是否具有给定的前缀/后缀,则可以使用.startsWith
/ .endsWith
方法(加.startsWith
也可以使用偏移量)。