假设我有一个字符串:
fgjh=621729_&ioij_fgjh7=twenty-_-One-_-Forty
我想从此字符串中提取以下子字符串:
1. "621729"
2. "twenty"
3. "One"
4. "Forty"
基本上我想在“fgjh =”substring和“fgjh7 =”子字符串之后提取任何内容。
我发现这个公式适用于excel:
=TRIM(RIGHT(SUBSTITUTE(A1,"fgjh=",REPT(" ",LEN(A1))),LEN(A1)))
但是excel文件太大了,我需要在R
中执行相同的操作我如何处理前导字符和尾随字符。让我们说字符串是“lmnop_82137_hhgia = 77789_pasdk_ikuk_fgjh = 621729_& ioij_fgjh7 = 20 - One - Forty_d saoij_882390 = lkuk”我需要在“fgjh =”之后提取数据,即621729以及“fgjh7 =”之后的所有内容只获得“二十”,“一”和“四十”
答案 0 :(得分:0)
将sub
与正则表达式一起使用比按位置分割更灵活:
> sub(".*=(.*)_&.*", "\\1", "fgjh=621729_&ioij_fgjh7=twenty--One--Forty", )
[1] "621729"
> sub(".*=(.*)--.*--.*", "\\1", "fgjh=621729_&ioij_fgjh7=twenty--One--Forty", )
[1] "twenty"
> sub(".*--(.*)--.*", "\\1", "fgjh=621729_&ioij_fgjh7=twenty--One--Forty", )
[1] "One"
> sub(".*--(.*)$", "\\1", "fgjh=621729_&ioij_fgjh7=twenty--One--Forty", )
[1] "Forty"
在一行中:
strsplit(sub(".*=(.*)_&.*=(.*)--(.*)--(.*)", "\\1\\|\\2\\|\\3\\|\\4",
"fgjh=621729_&ioij_fgjh7=twenty--One--Forty" ), split="\\|")[[1]]
[1] "621729" "twenty" "One" "Forty"
答案 1 :(得分:0)
您可以使用包stringr
和函数str_match
来解析带有正则表达式的有趣位
> library(stringr)
> s <- "fgjh=621729_&ioij_fgjh7=twenty--One--Forty"
> str_match(s, "^fgjh=([0-9]+)_&ioij_fgjh7=(.+)--(.+)--(.+)$")
[,1] [,2] [,3] [,4] [,5]
[1,] "fgjh=621729_&ioij_fgjh7=twenty--One--Forty" "621729" "twenty" "One" "Forty"
答案 2 :(得分:0)
^[\.{1,40}|A{1}]+(?!A)+(B)+(?!B)+(B|\.{1,40})$