Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 引号之间的子字符串内容_Regex_R_Substring - Fatal编程技术网

Regex 引号之间的子字符串内容

Regex 引号之间的子字符串内容,regex,r,substring,Regex,R,Substring,在DF中,我有不同长度的列条目,如下所示: tmp_ezg.“dr_HE_10691\”,tmp_ezg.“dr_MV_0112000016\”,tmp_ezg.“dr_MV_011129017\”等 如何才能最好地将引号之间的内容进行子串 我的想法是: substring(DF$name, 10) 由于引号的内容具有不同的长度,因此我无法提供substring()停止位置的值 是否有可能仅在某些符号(即引号)之间使用子字符串?例如 x <- c('tmp_ezg.\"dr_HE_106

在DF中,我有不同长度的列条目,如下所示:

tmp_ezg.“dr_HE_10691\”
tmp_ezg.“dr_MV_0112000016\”
tmp_ezg.“dr_MV_011129017\”

如何才能最好地将引号之间的内容进行子串

我的想法是:

substring(DF$name, 10)
由于引号的内容具有不同的长度,因此我无法提供substring()停止位置的值

是否有可能仅在某些符号(即引号)之间使用子字符串?例如

x <- c('tmp_ezg.\"dr_HE_10691\"' , 
       'tmp_ezg.\"dr_MV_0110200016\"' , 
       'tmp_ezg.\"dr_MV_0111290017\"')
res <- sub('.*?"([^"]+)"', "\\1", x)
print(res, quote=F)
# [1] dr_HE_10691     
# [2] dr_MV_0110200016
# [3] dr_MV_0111290017
例如,
x

x <- c('tmp_ezg.\"dr_HE_10691\"' , 
       'tmp_ezg.\"dr_MV_0110200016\"' , 
       'tmp_ezg.\"dr_MV_0111290017\"')
res <- sub('.*?"([^"]+)"', "\\1", x)
print(res, quote=F)
# [1] dr_HE_10691     
# [2] dr_MV_0110200016
# [3] dr_MV_0111290017

x要在引号之间分隔内容(假设每个条目中正好有两个),只需将字符串按
\\\“
(转义反斜杠和引号)拆分即可:


要在引号之间分隔内容(假设每个条目中正好有两个),只需将字符串按
\\\“
(转义反斜杠和引号)拆分即可:



使用正则表达式处理这个问题很棘手,因为您可能不知道需要捕获多少引号对。这实际上是一个解析器要处理的工作。在引用的子字符串中是否有转义引号?每个字符串只有一个带引号的子字符串吗?@Wiktor Stribizew:不,在带引号的子字符串中不会有转义引号,是的,每个字符串肯定只有一个引号。TimBiegeleisen:@lukeA的答案是有效的。然而,很难理解正则表达式。反对票投给了什么?初学者的问题太多?这个问题很难用正则表达式处理,因为您可能不知道需要捕获多少引号对。这实际上是一个解析器要处理的工作。在引用的子字符串中是否有转义引号?每个字符串只有一个带引号的子字符串吗?@Wiktor Stribizew:不,在带引号的子字符串中不会有转义引号,是的,每个字符串肯定只有一个引号。TimBiegeleisen:@lukeA的答案是有效的。然而,很难理解正则表达式。反对票投给了什么?初学者的问题太多了?你能解释一下正则表达式吗?当然。匹配任何字符直到第一个“,”在\1中捕获任何非-”字符直到下一个“,”谢谢!不需要
\\1
是什么意思?
\\1
是第一个捕获。你能解释一下正则表达式吗?当然。匹配任何字符直到第一个“,”在\1中捕获任何非-”字符直到下一个“,”谢谢!
不是必需的。
\\1
是什么意思?
\\1
是第一次捕获。感谢strsplit()输入。@lukeA的答案更有效,谢谢strsplit()输入。尽管@lukeA的答案更有效
[[1]]
[1] "tmp_ezg."         "dr_HE_10691"
[[2]]
[1] "tmp_ezg."         "dr_MV_0110200016"
[[3]]
[1] "tmp_ezg."         "dr_MV_0111290017"