我有一个问题。
我的文本文件包含以下行:
1.1 Description.
This is the description.
1.1.1 Quality Assurance
Random sentence.
1.6.1 Quality Control. Quality Control is the responsibility of the contractor.
我正试图找出如何获得:
1.1 Description
1.1.1 Quality Assurance
1.6.1 Quality Control
现在,我有:
txt1 <- readLines("text1.txt")
txt2<-grep("^[0-9.]+", txt1, value = TRUE)
file<-write(txt2, "text3.txt")
导致:
1.1 Description.
1.1.1 Quality Assurance
1.6.1 Quality Control. Quality Control is the responsibility of the contractor.
答案 0 :(得分:1)
您正在使用值为= TRUE的grep,
返回包含x的所选元素的字符向量 (在强制之后,保留名称但没有其他属性)。
这意味着,如果您的正则表达式匹配行中的任何内容,则将返回所有行。您设法构建正则表达式以匹配行开头的数字。因此,所有以数字开头的行都会被选中。
您的目标似乎不是选择所有行,而是选择只有换行符或句号。
因此,您需要将正则表达式调整为更具体,并且您只需要提取该行的匹配部分。
符合您要求的正则表达式可以是:
"^([0-9]\\.?)+ .+?(\\.|$)"
它选择带点的数字,然后是空格,后跟任何东西,并在a时停止匹配。来或线结束。我建议使用以下网站来更好地理解正则表达式的作用:https://regexr.com/
下一步是从给定行中仅提取匹配部分,而不是正则表达式匹配的所有行。为此,我们将使用函数regexpr,它告诉我们匹配的位置,以及函数regmatches,这有助于我们提取这些匹配:
txt1 <- readLines("text.txt")
regmatches(txt1, regexpr("^([0-9]\\.?)+ .+?(\\.|$)", txt1))