R gsub并以字符串形式返回正确的数字

R gsub并以字符串形式返回正确的数字,r,gsub,R,Gsub,我在数据框中有一个文本字符串,如下所示 2部门。第一区第一区 我的目标是在扇区之前提取数字,否则返回空白 我认为下面的正则表达式会起作用: gsub("^(?:([0-9]+).*Sector.*|.*)$","\\1",TEXTSTRINGCOLUMN) 当单词扇区不存在时,它正确地不返回任何内容,但返回1而不是2。非常感谢在我出错的地方提供帮助。谢谢 我们可以对扇区使用regex lookahead,将数字捕获为一个组,并在替换中指定捕获组\\1 编辑:根据@Avinash Raj的评论进

我在数据框中有一个文本字符串,如下所示

2部门。第一区第一区

我的目标是在扇区之前提取数字,否则返回空白

我认为下面的正则表达式会起作用:

gsub("^(?:([0-9]+).*Sector.*|.*)$","\\1",TEXTSTRINGCOLUMN)

当单词扇区不存在时,它正确地不返回任何内容,但返回1而不是2。非常感谢在我出错的地方提供帮助。谢谢

我们可以对扇区使用regex lookahead,将数字捕获为一个组,并在替换中指定捕获组\\1

编辑:根据@Avinash Raj的评论进行修改

如果不使用周围环境,则归功于@Avinash Raj

sub('.*?(\\d+)\\s*Sector.*', '\\1', v1)
数据 试试看


这在扇区不存在的情况下不起作用-例如x@thelatemail str_extractx,“\\d+?=\\s*Sector”返回NAthat@thelatemail看起来像是OP的初始代码返回。我不确定OP的代码在哪里失败。@akrun wait。。。不适用于23扇区,您的正则表达式必须为“.*?\\d+no,需要Perl,sub.*?\\d+\\s*扇区。*',“\\1',v1:-
sub('.*?(\\d+)\\s*Sector.*', '\\1', v1)
v1 <- "2 Sector. District 1, Area 1"
x <- "2 Sector. District 1, Area 1"
substring(x, 0, as.integer(grepl("Sector", x)))
#[1] "2"