删除字母数字字符串的数字部分,但保留纯数字

时间:2018-08-28 05:37:22

标签: r regex gsub

我正在尝试清理一些包含字母和数字的组合的字符串

a <- c("Hello World","Hello4 World","12345","Hello World 4","4Hello World5","Hello 4", "Hello4")

我正在尝试删除字母数字字符串的数字部分,但保留纯数字,或者当数字用空格分隔时,我正在寻找的输出是

b <- c("Hello World","Hello World","12345","Hello World 4","Hello World", "Hello 4","Hello")

字符串可以是任何东西,不一定是'Hello'或'World',我尝试了各种正则表达式组合,但无法获得想要的东西。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

gsub('(?i)(?<=[a-z])\\d+|\\d+(?=[a-z])','',a,perl=T)
[1] "Hello World"   "Hello World"   "12345"         "Hello World 4" "Hello World"   "Hello 4"       "Hello"   

说明:

  • ?i用于忽略情况。即,您也可以使用参数ignore.case = TRUE

  • (?<=[a-z])\\d+这是一个回溯,您正在寻找数字,即\\d+ immediately preceded by a letter(?<= [a-z])`

  • |

  • \\d+(?=[a-z]),这是一种先行方式,您可以在其中查找数字\\d+,然后紧跟字母(?=[a-z])

用一个空字符串替换它。即replacement =''gsub函数的第二个参数

gsub('([a-z])\\d+|\\d+([a-z])','\\1\\2',a,ignore.case = T)
[1] "Hello World"   "Hello World"   "12345"         "Hello World 4" "Hello World"   "Hello 4"       "Hello" 

这遵循几乎相同的技巧,但我们使用反向引用而不是使用环顾四周。

  • ([a-z])\\d+将数字前面的字母捕获为第1组
  • |\\d+([a-z])捕获紧随数字之后的字母 作为第2组

现在将整个表达式替换为捕获的字母,即\\1\\2

您可以根据需要混合使用两个正则表达式。

答案 1 :(得分:0)

按空格分割输入后使用正则表达式

[A-Za-z] - all letters 

^[0-9] - all digits