如何在最后一位数字后拆分字符串

How to split string after the last digit

要清理数据集,我需要在最后一位数字后拆分一个字符串。有什么想法吗?

我的数据框:

data = {'addr':[
         "510 -1, Cleveland St", 
         "RC-20-5345 Poplar Street", 
         "3600 Race Avenue Richardson"]}

df = pd.DataFrame(data)

   addr
_____________________________________
   510 -1, Cleveland St
   RC-20-5345 Poplar Street
   3600 Race Avenue Richardson

我试过这个表达式,但我错过了第二行的楼层数 (RC)。

df["split1"] = df["addr"].str.extract(r"(\d+[-\ ]+\d*)")

  split1   | split2
___________|_________________________
510 -1     |  , Cleveland St
20-5345    |  Poplar Street
3600       |  Race Avenue Richardson

我在找什么:

  split1   | split2
___________|_________________________
510 -1     |  , Cleveland St
RC-20-5345 |  Poplar Street
3600       |  Race Avenue Richardson

只在正则表达式的前面添加一个通配符匹配怎么样?

df["split1"] = df["addr"].str.extract(r"(.*\d+[-\ ]+\d*)")

def splitByLastDigit(x):
    lastDigit=0
    splitOne=""
    splitTwo=""
    finalArray=[]
    for i in range(0,len(x)):
        if x[i].isdigit() and i > lastDigit:
            lastDigit=i

    for i in range(0,len(x)):
        if i <= lastDigit:
            splitOne+=x[i]
        else:
            splitTwo+=x[i]
    if len(splitTwo.strip()) == 1 and splitTwo.strip().isalpha():
        return [splitOne+splitTwo]
    finalArray.append(splitOne)
    finalArray.append(splitTwo)
    return finalArray

刚刚写下了这个解决方案。它有点粗糙(绝对可以做得更优雅)但是用你提供的三个例子测试了它并完成了工作。

很简单的想法。收集最后一位数字的索引,然后另一个循环检查该索引之前和之后的字符。最后,向其附加一个数组和 returns 最终结果。

借用 zyd 的答案,捕获另一组中的其余部分

data = {'addr':[
         "510 -1, Cleveland St", 
         "RC-20-5345 Poplar Street", 
         "3600 Race Avenue Richardson"]}

df = pd.DataFrame(data)
df[['split1','split2']] = df["addr"].str.extract(r"(.*\d+[-\ ]+\d*)(.+)")
                          addr       split1                  split2
0         510 -1, Cleveland St       510 -1          , Cleveland St
1     RC-20-5345 Poplar Street  RC-20-5345            Poplar Street
2  3600 Race Avenue Richardson        3600   Race Avenue Richardson