Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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 - Fatal编程技术网

Regex 使用正则表达式从文件中提取部分文本

Regex 使用正则表达式从文件中提取部分文本,regex,r,Regex,R,我正在尝试使用以下代码: x <- scan("myfile.txt", what="", sep="\n") b <- grep('/^one/(.*?)/^four/', x, ignore.case = TRUE, perl = TRUE, value = TRUE, fixed = FALSE, useBytes = FALSE, invert = FALSE) 我期望的结果是 one two three four 我想包括“一”和“四”,我不想抛弃它们:)

我正在尝试使用以下代码:

x <- scan("myfile.txt", what="", sep="\n")

b <- grep('/^one/(.*?)/^four/', x, ignore.case = TRUE, perl = TRUE, value = TRUE,
     fixed = FALSE, useBytes = FALSE, invert = FALSE)
我期望的结果是

one
two
three
four
我想包括“一”和“四”,我不想抛弃它们:)

但是不知何故,正则表达式不起作用,控制台输出没有给出错误,但也没有给出文本

我正在使用打印(b)

或者在单词之间留出空格:

gsub('one(.*)four','\\1',paste(dat,collapse=' '))
[1] "zero  two three  five"
在Gsee评论后编辑

 gsub('.*(one.*four).*','\\1',paste(dat,collapse=' '))
[1] "one two three four"
但我认为这里不需要使用正则表达式:

 dat[seq(which(dat == 'one'),which(dat == 'four'))]
[1] "one"   "two"   "three" "four" 
当然,如果前面的索引顺序不好,可以使用min

或者在单词之间留出空格:

gsub('one(.*)four','\\1',paste(dat,collapse=' '))
[1] "zero  two three  five"
在Gsee评论后编辑

 gsub('.*(one.*four).*','\\1',paste(dat,collapse=' '))
[1] "one two three four"
但我认为这里不需要使用正则表达式:

 dat[seq(which(dat == 'one'),which(dat == 'four'))]
[1] "one"   "two"   "three" "four" 

当然,如果前面的索引顺序不好,您可以使用min。

我不太清楚您在寻找什么,但只是为了好玩

R> x
[1] "zero"  "one"   "two"   "three" "four"  "five" 

R> grep("one|four", x) # get the position of "one" and "four"
[1] 2 5
子集
x
仅包括“一”和“四”之间的内容


我不太清楚你在找什么,只是为了好玩

R> x
[1] "zero"  "one"   "two"   "three" "four"  "five" 

R> grep("one|four", x) # get the position of "one" and "four"
[1] 2 5
子集
x
仅包括“一”和“四”之间的内容



我也试过print(b[1])也许我应该遍历fector?但是我认为第一行(单词“two”)应该在b[2]不是,只有“NA”看看
x
:它不是一个长字符串,它是一个向量,每个项目中有一行<代码>grep尝试匹配向量中的每个项目。我尝试将向量转换为字符串a。如果您提供更多有关您尝试执行的操作以及原因的信息,以及这些单词是否始终“有序”,可能会有所帮助。为什么不希望结果的格式使其易于在R中使用?有没有理由用R来做这个?你是想写一个文件,打印到屏幕上,还是分配一个向量?我也试过打印(b[1]),也许我应该在fector中迭代?但是我认为第一行(单词“two”)应该在b[2]不是,只有“NA”看看
x
:它不是一个长字符串,它是一个向量,每个项目中有一行<代码>grep尝试匹配向量中的每个项目。我尝试将向量转换为字符串a。如果您提供更多有关您尝试执行的操作以及原因的信息,以及这些单词是否始终“有序”,可能会有所帮助。为什么不希望结果的格式使其易于在R中使用?有没有理由用R来做这个?你想写一个文件,打印到屏幕上,或者分配一个向量吗?我想你想要的是这样的:
gsub(“*(一个。*四个)。*”,“\\1”,粘贴(x,collapse=”“)
。请注意,OP上写着“我想包括“一”和“四”我不想放弃它们“@Gsee你说得对……我正在重新阅读这个问题。。。。是的,你说得对!我更新了我的解决方案…但gsub在这里看起来很难看!我需要它们作为新线\n这是如何工作的
b@ace007,类似于
cat(粘贴(x,collapse=“\n”))
cat
也接受
文件
参数,如果这样有帮助的话。我想你应该这样做:
gsub(“*(一个。*四个)。*”,“\\1”,粘贴(x,collapse=”“)
。请注意,OP上写着“我想包括“一”和“四”我不想放弃它们“
@Gsee你说得对……我正在重新阅读这个问题。。。。是的,你说得对!我更新了我的解决方案…但gsub在这里看起来很难看!我需要它们作为新线\n这是如何工作的
b@ace007,类似于
cat(粘贴(x,collapse=“\n”))
cat
也接受
文件
参数(如果有帮助的话)。我希望从文件中提取一块文本,并使用新行(而不是全部在一行)将一块文本打印到控制台。也,我可以像在perl中一样使用^运算符来表示我想在行首匹配吗?@ACE07如果您仔细阅读
?regex
,您将看到所有可用选项的详细说明。@ACE07您可以在这里获取结果,并将其传递给
粘贴
折叠='\n'
,以获得您正在查找的输出for.im希望从文件中提取一块文本,并使用新行将一块文本打印到控制台,而不是全部打印在一行上。也,我可以像在perl中一样使用^运算符来表示我想在行首匹配吗?@ACE07如果您仔细阅读
?regex
,您将看到所有可用选项的详细说明。@ACE07您可以在这里获取结果,并将其传递给
粘贴
折叠='\n'
,以获得您正在查找的输出对于