Try this:
library(tidyr)
data.frame(x) %>%
# split the string into substrings demarcated by the digit followed by the period:
separate_rows(x, sep = "\\n(?=\\d+\\.)") %>%
# extract the relevant parts into two columns using `species` or `genus` as demarcation:
extract(x,
into = c("part1", "part2"),
regex = "(.*)\\n(species.*|genus.*)")
# A tibble: 9 × 2
part1 part2
<chr> <chr>
1 2. Nepsalus jezoensis species, insects
2 3. Prochas sp. 2 YYH-2022a species, wasps, ants & bees
3 4. Prochas sp. 1 YYH-2022a species, wasps, ants & bees
4 5. Eccoptopterus sp. 1 CP-2022 species, beetles
5 6. Andricus sp. 1 CYS-2022a species, wasps, ants & bees
6 7. Paralabellula curvicauda species, earwigs
7 8. Paralabellula genus, earwigs
8 9. Pristiphora sp. species, hymenopterans
9 10. Phyllotreta flexuosa species, beetles
Data:
x <- "2. Nepsalus jezoensis
species, insects
3. Prochas sp. 2 YYH-2022a
species, wasps, ants & bees
4. Prochas sp. 1 YYH-2022a
species, wasps, ants & bees
5. Eccoptopterus sp. 1 CP-2022
species, beetles
6. Andricus sp. 1 CYS-2022a
species, wasps, ants & bees
7. Paralabellula curvicauda
species, earwigs
8. Paralabellula
genus, earwigs
9. Pristiphora sp.
species, hymenopterans
10. Phyllotreta flexuosa
species, beetles"