首页 > 解决方案 > R-- 提取特定文本和随后的文本/数字

问题描述

我有一列包含文本字符串,我不仅想提取特定字符串,还想提取该指定字符串后面的字符串或数字。对此有什么好的解决方案?

在下面的示例中 - 我想创建一个列“extract”以及str_extract“lot”和“unit”这两个词,并且还提取此文本后面的后续数字。

ID 笔记 提炼
1 地段 56,地层标题,56/SP77100, 第 56 节
2 18/SP71866,商业,17/SP71866,批次 18 地段 18
3 单元 9;3R/PS732002 单元 9
4 V1602 F63, Section 8 Block 68 Unit 3 单元 3

看过很多正则表达式代码,但对于如何从指定的目标文本字符串中提取后续值没有任何帮助。

到目前为止,从另一个 StackOverflow 问题中尝试了这个-

 result <- table %>% 
  mutate(extract = str_extract(notes, "(?lot\\s)\\W\\s?\\d+\\")) %>%
  mutate(lot = str_squish(lot)) 

标签: rregexdplyr

解决方案


您可以使用

str_extract(notes, "(?i)\\b(?:lot|unit)\\W*\\d+")

请参阅正则表达式演示

细节

  • (?i)- 不区分大小写的标志
  • \b - 单词边界
  • (?:lot|unit)- 要么lotunit
  • \W*- 任何零个或多个非单词字符
  • \d+- 一位或多位数字。

R测试:

library(dplyr)
library(stringr)
df <- data.frame(notes=c("LOT 56, STRATA TITLE, 56/SP77100,","18/SP71866, COMMERCIAL, 17/SP71866, lot 18","unit 9; 3R/PS732002", "V1602 F63, Section 8 Block 68 Unit 3"))
df %>% 
+   mutate(extract = str_extract(notes, "(?i)\\b(?:lot|unit)\\W*\\d+"))
                                       notes extract
1          LOT 56, STRATA TITLE, 56/SP77100,  LOT 56
2 18/SP71866, COMMERCIAL, 17/SP71866, lot 18  lot 18
3                        unit 9; 3R/PS732002  unit 9
4       V1602 F63, Section 8 Block 68 Unit 3  Unit 3

推荐阅读