diff --git a/cpp/src/arrow/compute/kernels/scalar_string.cc b/cpp/src/arrow/compute/kernels/scalar_string.cc index 065c512c552..be1cc83d158 100644 --- a/cpp/src/arrow/compute/kernels/scalar_string.cc +++ b/cpp/src/arrow/compute/kernels/scalar_string.cc @@ -1635,12 +1635,7 @@ struct ExtractRegex : public ExtractRegexBase { checked_cast(struct_builder->field_builder(i))); } - auto visit_null = [&]() { - for (int i = 0; i < group_count; i++) { - RETURN_NOT_OK(field_builders[i]->AppendEmptyValue()); - } - return struct_builder->AppendNull(); - }; + auto visit_null = [&]() { return struct_builder->AppendNull(); }; auto visit_value = [&](util::string_view s) { if (Match(s)) { for (int i = 0; i < group_count; i++) { @@ -1648,7 +1643,7 @@ struct ExtractRegex : public ExtractRegexBase { } return struct_builder->Append(); } else { - return visit_null(); + return struct_builder->AppendNull(); } }; const ArrayData& input = *batch[0].array(); diff --git a/cpp/src/arrow/compute/kernels/scalar_string_test.cc b/cpp/src/arrow/compute/kernels/scalar_string_test.cc index 577493913b5..cb74b1449b5 100644 --- a/cpp/src/arrow/compute/kernels/scalar_string_test.cc +++ b/cpp/src/arrow/compute/kernels/scalar_string_test.cc @@ -539,6 +539,10 @@ TYPED_TEST(TestStringKernels, ExtractRegex) { "extract_regex", R"(["a1", "b2", "c3", null])", type, R"([{"letter": "a", "digit": "1"}, {"letter": "b", "digit": "2"}, null, null])", &options); + this->CheckUnary( + "extract_regex", R"(["a1", "c3", null, "b2"])", type, + R"([{"letter": "a", "digit": "1"}, null, null, {"letter": "b", "digit": "2"}])", + &options); this->CheckUnary("extract_regex", R"(["a1", "b2"])", type, R"([{"letter": "a", "digit": "1"}, {"letter": "b", "digit": "2"}])", &options);