我有一个字符串,其中包含一些格式错误的数据。
"007>009 021>089,017,018,12 - ,1200EST -"
子字符串,1200EST
是一个错误,可能是属于另一个变量的数据。目前还不清楚这种类型的格式化错误在数据集中的频繁程度,但由于子字符串的格式包含字母(字符串根本不应该有),我还是喜欢为gsub
制作我的搜索模式。捕获是获取子串的其余部分,即前面的(或可能是尾随的)数字和逗号,如果包含字母,则基本上是空格之间的所有内容。问题在于正则表达式模式必须相当普遍,基本上任何一系列字母和所有非空格字符都与字母系列相邻。
我有这个:
gsub("\\s+.*[[:alpha:]].*\\s+", " ", h2)
根本不起作用,返回:
[1] "007>009-"
如何格式化正则表达式模式?
修改
包含字母的子字符串也可能如下所示:
" EST1200" " EST" " -1500ABC"
同样,仅由空格分隔的子字符串,包含1个或多个字母,与0个或更多任何类型的其他字符相邻。
答案 0 :(得分:1)
如果您只想丢失",1200EST"
,可以使用:
s <- "007>009 021>089,017,018,12 - ,1200EST -"
gsub(",\\d+EST", "", s)
还要丢失尾随" -"
:
gsub(",\\d+EST -", "", s)
对于领先的"- "
,如下:
gsub(" - ,\\d+EST -", "", s)
等等。
如果您认为这些字母可能不是"EST"
,
你可以抓住这样的字母:
gsub(" - ,\\d+[A-Z]+ -", "", s)
答案 1 :(得分:0)
尝试搜索模式(.*),.*
并替换为第一个捕获组。
input <- "007>009 021>089,017,018,12 - ,1200EST -"
gsub("(.*),.*", "\\1", input)
[1] "007>009 021>089,017,018,12 - "