Hi,
This would be possible, providing you can specify how to extract the overlapping first part of each string. In your example, the overlapping parts are all starting with the same word (which does not contain any digits), then followed by different digits. This means we can extract the parts easily using RegEx like so
library(tidyverse)
#Data
df1<-data.frame(x = 1:4)
rownames(df1)<-c('hello5678', 'how6543', 'are9863', 'you5364')
df2<-data.frame(y = 1:4)
rownames(df2)<-c('hello1234', 'how7643', 'are6323', 'you7496')
#Extract the common naming parts from row names
df1 = df1 %>% rownames_to_column() %>%
mutate(rowname = str_extract(rowname, "^\\D+"))
df2 = df2 %>% rownames_to_column() %>%
mutate(rowname = str_extract(rowname, "^\\D+"))
#Join the tables
df1 %>% full_join(df2, by = "rowname")
#> rowname x y
#> 1 hello 1 1
#> 2 how 2 2
#> 3 are 3 3
#> 4 you 4 4
Created on 2021-07-15 by the reprex package (v2.0.0)
The RegEx pattern ^\D+ means: extract from the start ^ everything that is not a digit \D+