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'
,以获得您正在查找的输出对于