如何提取节号和后面的文字?

时间:2018-06-15 17:14:18

标签: r

我有一个问题。

我的文本文件包含以下行:

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.

1 个答案:

答案 0 :(得分:1)

您正在使用值为= TRUE的grep,

  

返回包含x的所选元素的字符向量   (在强制之后,保留名称但没有其他属性)。

这意味着,如果您的正则表达式匹配行中的任何内容,则将返回所有行。您设法构建正则表达式以匹配行开头的数字。因此,所有以数字开头的行都会被选中。

您的目标似乎不是选择所有行,而是选择只有换行符或句号。

因此,您需要将正则表达式调整为更具体,并且您只需要提取该行的匹配部分。

符合您要求的正则表达式可以是:

"^([0-9]\\.?)+ .+?(\\.|$)"

它选择带点的数字,然后是空格,后跟任何东西,并在a时停止匹配。来或线结束。我建议使用以下网站来更好地理解正则表达式的作用:https://regexr.com/

下一步是从给定行中仅提取匹配部分,而不是正则表达式匹配的所有行。为此,我们将使用函数regexpr,它告诉我们匹配的位置,以及函数regmatches,这有助于我们提取这些匹配:

txt1 <- readLines("text.txt")

regmatches(txt1, regexpr("^([0-9]\\.?)+ .+?(\\.|$)", txt1))