diff --git a/py/objstr.c b/py/objstr.c
index 0621a8df7544762b274612c74a32a81bd554c1f5..7c1be50cc00a6871fc07d84086165ddd7478a597 100644
--- a/py/objstr.c
+++ b/py/objstr.c
@@ -270,7 +270,8 @@ mp_obj_t str_format(int n_args, const mp_obj_t *args) {
             str++;
             if (*str == '{') {
                 vstr_add_char(vstr, '{');
-            } else if (*str == '}') {
+            } else {
+                while (*str != '}') str++;
                 if (arg_i >= n_args) {
                     nlr_jump(mp_obj_new_exception_msg(MP_QSTR_IndexError, "tuple index out of range"));
                 }
diff --git a/tests/basics/tests/string-format.py b/tests/basics/tests/string-format.py
new file mode 100644
index 0000000000000000000000000000000000000000..ba51e0890b50605b8631036be9d891f395333083
--- /dev/null
+++ b/tests/basics/tests/string-format.py
@@ -0,0 +1,8 @@
+print("{}-{}".format(1, [4, 5]))
+print("{0}-{1}".format(1, [4, 5]))
+print("{:x}".format(1))
+print("{!r}".format(2))
+# TODO
+#print("{1}-{0}".format(1, [4, 5]))
+#print("{:x}".format(0x10))
+#print("{!r}".format("foo"))