如何在unix或R或grep或awk中拆分以下格式的街道地址?

vch*_*ngs 2 regex awk split substring r

我有一个带有意大利街道名称和地址的文件,我必须将地址栏分成街道名称和街道号码.捕获的是地址有两个或三个字符串,然后数字或数字有时也有字符,例如15/a其中一些有12-Maggio 23的地址,我的拆分应该是第一列12-maggio和第二列23.

以下是文件的格式

Street.adress
Falcone N. 1
Fortunato Giustino 2
Pisacane 3
Fabrizio De Andre' 8
S. Satta 7
Agnesi 16
Volturno Cigni 80
Montepenice 6
Cucchiari 15
Molinetto Di Lorenteggio 15/T 7
Don Minzoni 15
Senigallia 4
Milano 38/A
L. Da Vinci 13/A
27-Novembre 9
Run Code Online (Sandbox Code Playgroud)

输出应该在2个单独的列中

Falcone N.  1
 Fortunato Giustino 2
 Pisacane   3
 Fabrizio De Andre' 8
 S. Satta   7
 Agnesi 16
 Volturno Cigni 80
 Montepenice 6  6
 Cucchiari  15
 Molinetto Di Lorenteggio    15/T 7
 Don Minzoni    15
 Senigallia 4
 Milano 38/A
 L. Da Vinci    13/A
 27-Novembre    9
Run Code Online (Sandbox Code Playgroud)

我怎么能实现这一点,我已经尝试了excel公式,也没有解压缩但不起作用.我在R中试过下面的代码但它失败了,所以我该怎么做呢?

for (i in 1:nrow (df)) {

  new_df [i,"Street.Name"] <- unlist(strsplit (df[["Street.Addresses"]], " ")[i])[1]
  new_df [i,"Street.Number"] <- paste (unlist(strsplit (df[["Street.Addresses"]], " ")[i])[-1], collapse = " ")

}
Run Code Online (Sandbox Code Playgroud)

试着

df <- gsub("$([0-9]+ +)?(.*)", "\\1\t\\2", df)
Run Code Online (Sandbox Code Playgroud)

什么都行不通.任何线索

And*_*rie 6

此正则表达式与您提供的数据相结合gsub()strsplit()对其进行处理.

这里的技巧是我首先\t在我要分割字符串的位置插入一个,然后使用strsplit()with \t作为分隔符.

x <- read.table(sep = "\n",
                header = TRUE,
                quote = "\"",
                text = "Street.adress
Falcone N. 1
Fortunato Giustino 2
Pisacane 3
Fabrizio De Andre' 8
S. Satta 7
Agnesi 16
Volturno Cigni 80
Montepenice 6
Cucchiari 15
Molinetto Di Lorenteggio 15/T 7
Don Minzoni 15
Senigallia 4
Milano 38/A
L. Da Vinci 13/A
27-Novembre 9"
)


pattern <- "(.*?) +(\\d+.*)"

z <- gsub(pattern, "\\1\t\\2", x[[1]])
unlist(
  strsplit(z, "\t")
)
Run Code Online (Sandbox Code Playgroud)

结果:

 [1] "Falcone N."               "1"                       
 [3] "Fortunato Giustino"       "2"                       
 [5] "Pisacane"                 "3"                       
 [7] "Fabrizio De Andre'"       "8"                       
 [9] "S. Satta"                 "7"                       
[11] "Agnesi"                   "16"                      
[13] "Volturno Cigni"           "80"                      
[15] "Montepenice"              "6"                       
[17] "Cucchiari"                "15"                      
[19] "Molinetto Di Lorenteggio" "15/T 7"                  
[21] "Don Minzoni"              "15"                      
[23] "Senigallia"               "4"                       
[25] "Milano"                   "38/A"                    
[27] "L. Da Vinci"              "13/A"                    
[29] "27-Novembre"              "9"   
Run Code Online (Sandbox Code Playgroud)

PS.编辑答案以处理'输入数据中有引用的事实.要处理这个问题,你必须设置quote = "\""为参数,read.table()否则将跳过某些行.