如何用正则表达式替换子字符串和所有非空格连续字符?

时间:2018-02-06 03:17:41

标签: r regex string gsub

我有一个字符串,其中包含一些格式错误的数据。

"007>009 021>089,017,018,12 - ,1200EST -"

子字符串,1200EST是一个错误,可能是属于另一个变量的数据。目前还不清楚这种类型的格式化错误在数据集中的频繁程度,但由于子字符串的格式包含字母(字符串根本不应该有),我还是喜欢为gsub制作我的搜索模式。捕获是获取子串的其余部分,即前面的(或可能是尾随的)数字和逗号,如果包含字母,则基本上是空格之间的所有内容。问题在于正则表达式模式必须相当普遍,基本上任何一系列字母和所有非空格字符都与字母系列相邻。

我有这个:

gsub("\\s+.*[[:alpha:]].*\\s+", " ", h2)

根本不起作用,返回:

[1] "007>009-"  

如何格式化正则表达式模式?

修改

包含字母的子字符串也可能如下所示:

" EST1200" " EST" " -1500ABC"

同样,仅由空格分隔的子字符串,包含1个或多个字母,与0个或更多任何类型的其他字符相邻。

2 个答案:

答案 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 - "

Demo