Regex 引号之间的子字符串内容
在DF中,我有不同长度的列条目,如下所示: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
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"