寻找从我目前拥有的文字中删除街道地址的方法。是否有正则表达式可以检测数字范围内的文本?我在想的是我有一个邮政编码,通常是地址开头的数字。
1234 Parks St.,Los Angeles,CA 90001
我的主要问题是,当我进行其他清洁工作并在我的设置中查找其他字词时,我想从我的数据集中删除街道名称。
我正在使用Rstudio进行清洁。
答案 0 :(得分:1)
返回一个字符向量。读取正则表达式,将其分为三个捕获组:parens:第一个是连续数字的任何计数,后跟任意数量的非数字,后跟5个数字。只返回第一个和第三个,中间有一个空格(如果匹配),如果不匹配则不做任何更改;
> gsub("([0-9]*)(\\D*)(\\d{5})", "\\1 \\3", test)
[1] "1234 90001" "9876 94501"
需要进一步解析才能返回一组数字向量
> scan( text=gsub("([0-9]*)(\\D*)(\\d{5})", "\\1 \\3", test), what=list("", "") )
Read 2 records
[[1]]
[1] "1234" "9876"
[[2]]
[1] "90001" "94501"
可能更好地将拉链作为字符读取(因为您需要保留前导零),但可以通过更改what
列表类型将街道号码转换为数字:
> scan( text=gsub("([0-9]*)(\\D*)(\\d{5})", "\\1 \\3", test), what=list( numeric(), "") )
Read 2 records
[[1]]
[1] 1234 9876
[[2]]
[1] "90001" "94501"
使这更有用:
> setNames( data.frame( scan( text=gsub("([0-9]*)(\\D*)(\\d{5})", "\\1 \\3", test),
what=list( numeric(), "") ) ,
stringsAsFactors=FALSE),
c( "StrtNumber", "ZIP") )
Read 2 records
StrtNumber ZIP
1 1234 90001
2 9876 94501