删除字母数字字符串的数字部分但保留纯数字
Remove the numeric portion of alphanumeric strings but keep the pure numbers
我正在尝试清理一些包含字母和数字组合的字符串
a <- c("Hello World","Hello4 World","12345","Hello World 4","4Hello World5","Hello 4", "Hello4")
我正在尝试删除字母数字字符串的数字部分但保留纯数字,或者当数字被 space 分隔时,我正在寻找的输出是。
b <- c("Hello World","Hello World","12345","Hello World 4","Hello World", "Hello 4","Hello")
字符串可以是任何东西,不一定是 'Hello' 或 'World',我尝试了各种正则表达式组合,但无法得到我想要的。
如有任何帮助,我们将不胜感激!
通过 space
拆分输入后使用正则表达式
[A-Za-z] - all letters
^[0-9] - all digits
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+
这是一个 lookbehind,您正在寻找数字,即 \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
您可以根据需要混合使用这两个正则表达式。
我正在尝试清理一些包含字母和数字组合的字符串
a <- c("Hello World","Hello4 World","12345","Hello World 4","4Hello World5","Hello 4", "Hello4")
我正在尝试删除字母数字字符串的数字部分但保留纯数字,或者当数字被 space 分隔时,我正在寻找的输出是。
b <- c("Hello World","Hello World","12345","Hello World 4","Hello World", "Hello 4","Hello")
字符串可以是任何东西,不一定是 'Hello' 或 'World',我尝试了各种正则表达式组合,但无法得到我想要的。
如有任何帮助,我们将不胜感激!
通过 space
拆分输入后使用正则表达式[A-Za-z] - all letters
^[0-9] - all digits
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+
这是一个 lookbehind,您正在寻找数字,即\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
您可以根据需要混合使用这两个正则表达式。