r语言 - 正则表达式:拆分字符串时如何保留所有数字?



问题

使用正则表达式,拆分字符串时如何保留所有数字?

概述

我想将字符向量中的每个元素sample.text分成两个元素:一个是数字,一个是文本。

当前尝试正在删除最后一个数字

base::strsplit()内部的正则表达式 -\d\s{1}- 删除最后一个数字。下面是我的尝试,以及我想要的输出。

# load necessary data -----
sample.text <-
c("111110 Soybean Farming", "0116 Soybeans")
# split string by digit and one space pattern ------
strsplit(sample.text, split = "\d\s{1}")
# [[1]]
# [1] "11111"           "Soybean Farming"
# 
# [[2]]
# [1] "011"      "Soybeans"
# desired output --------
# [[1]]
# [1] "111110"           "Soybean Farming"
# 
# [[2]]
# [1] "0116"      "Soybeans"
# end of script #

关于如何拆分sample.text以保留所有数字的任何建议将不胜感激!谢谢。

因为你在\d上拆分,所以那里的数字在正则表达式中使用,而不是在输出中。请改用数字的后视:

strsplit(sample.text, split = "(?<=\d) ", perl=TRUE)

http://rextester.com/GDVFU71820

一些替代解决方案,在第一次出现空格时使用非常简单的模式匹配:

1( 间接地使用sub替换您自己的分隔符,然后strsplit您的分隔符:

例如,你可以用';"代替第一个空格(如果你知道你的数据中不存在这个字符(:

strsplit( sub(' ', ';', sample.text), split=';')

2( 使用regexprregmatches

您可以有效地匹配第一个" "(空格字符(,并按如下方式拆分:

regmatches(sample.text, regexpr(" ", sample.text), invert = TRUE)

结果是一个列表,如果这是您根据示例所需输出所追求的:

[[1]]
[1] "111110"          "Soybean Farming"
[[2]]
[1] "0116"     "Soybeans"

3( 使用纵梁库:

library(stringr)
str_split_fixed(sample.text, " ", 2)  #outputs a character matrix
[,1]     [,2]             
[1,] "111110" "Soybean Farming"
[2,] "0116"   "Soybeans"  

最新更新