Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.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
R 取出符合图案的线的一部分_R_Regex - Fatal编程技术网

R 取出符合图案的线的一部分

R 取出符合图案的线的一部分,r,regex,R,Regex,目前我有一个这样的代码 Filename <- file.choose() dirname <- dirname(Filename) setwd(dirname) print(dirname) 但它只是输出相同的名称,所以我认为我做错了什么。非常感谢您的帮助。您可以使用sub sub('.*(P[0-9]+[A-Z][0-9]+).*','\\1', dirname) #[1] "P3F5" 还有一些例子需要验证 x <- 'Volumes/Lab/Data/Darwin

目前我有一个这样的代码

Filename <- file.choose()
dirname <- dirname(Filename)
setwd(dirname)
print(dirname)

但它只是输出相同的名称,所以我认为我做错了什么。非常感谢您的帮助。

您可以使用
sub

sub('.*(P[0-9]+[A-Z][0-9]+).*','\\1', dirname)
#[1] "P3F5"

还有一些例子需要验证

x <- 'Volumes/Lab/Data/Darwin/Patient1/Cancer/Well1/P10Q11/PointMutation'
sub('.*(P[0-9]+[A-Z][0-9]+).*','\\1', x)
#[1] "P10Q11"

x <- 'Volumes/Lab/Data/Darwin/Patient1/Cancer/Well1/P6Q2/PointMutation'
sub('.*(P[0-9]+[A-Z][0-9]+).*','\\1', x)
#[1] "P6Q2"

您可以使用
sub

sub('.*(P[0-9]+[A-Z][0-9]+).*','\\1', dirname)
#[1] "P3F5"

还有一些例子需要验证

x <- 'Volumes/Lab/Data/Darwin/Patient1/Cancer/Well1/P10Q11/PointMutation'
sub('.*(P[0-9]+[A-Z][0-9]+).*','\\1', x)
#[1] "P10Q11"

x <- 'Volumes/Lab/Data/Darwin/Patient1/Cancer/Well1/P6Q2/PointMutation'
sub('.*(P[0-9]+[A-Z][0-9]+).*','\\1', x)
#[1] "P6Q2"

那么,你是说你总是想要完整路径中的倒数第二个条目吗?你是说你总是想要完整路径中的倒数第二个条目吗?我想你可能想让这更具体,并坚持在匹配的至少一侧使用文件分隔符。@TimBiegeleisen你的意思是类似于
sub('.\\/(P[0-9]+[A-Z][0-9]+)\\/.''、'\\1',dirname)
?或者选择一个,如果OP可以让我们知道+1的位置。这很好@Ronaksah,你能解释一下+符号在子函数中的含义吗?@Darvinchang如果你想包含两位数的数字,你需要
+
,否则它只能捕获一位数的数字。从正则表达式中删除
+
符号,并运行
P10Q11
P1Q11
的命令,查看输出中的差异。我认为您可能希望使这更具体,并坚持在匹配的至少一侧使用文件分隔符。@TimBiegeleisen您的意思是类似于
sub('.\\\/(P[0-9]+[A-Z][0-9]+)\\/.''、'\\1',dirname)
?或者选择一个,如果OP可以让我们知道+1的位置。这很好@Ronaksah,你能解释一下+符号在子函数中的含义吗?@Darvinchang如果你想包含两位数的数字,你需要
+
,否则它只能捕获一位数的数字。从正则表达式中删除
+
符号,并对
P10Q11
P1Q11
运行命令,查看输出中的差异。