首页 > 解决方案 > 带有长表达式的 R 正则表达式

问题描述

我有一个来自 pdf 提取的长字符。下面是一个 MWE:

MWE <- "4 BLABLA\r\n Table 1. Real GDP\r\n Percentage changes\r\n 2016 2017 \r\nArgentina -2.5 2.7\r\nAustralia 2.6 2.5\r\n BLABLA \r\n Table 2. Nominal GDP\r\n Percentage changes\r\n 2011 2012\r\nArgentina 31.1 21.1\r\nAustralia 7.7 3.3\r\n"

我想把它分成一个列表,每个元素都是一个表。 我可以这样做

MWE_1 <- as.list(strsplit(MWE, "(?<=[Table\\s+\\d+\\.\\s+(([A-z]|[ \t]))+\\r\\n])"))

> MWE_1
[[1]]
[1] "4 BLABLA\r\n "                                                                                 
[2] " Percentage changes\r\n 2016 2017 \r\nArgentina -2.5 2.7\r\nAustralia 2.6 2.5\r\n BLABLA 5\r\n "
[3] " Percentage changes\r\n 2011 2012\r\nArgentina 31.1 21.1\r\nAustralia 7.7 3.3\r\n"         

但我想保留分隔符,这是一个非常长的正则表达式。我看了一点,似乎一个不错的方法是尝试lookbehinds。但是,我不知道如何连接我的长正则表达式。例如,
MWE_2 <- as.list(strsplit(MWE, "(?<=[Table\\s+\\d+\\.\\s+(([A-z]|[ \t]))+\\r\\n])"))

产生错误:

invalid regular expression '(?<=[Table\s+\d+\.\s+(([A-z]|[  ]))+\r\n])', reason 'Invalid regexp'

如何以紧凑的方式做到这一点?

另外,有没有不保留第一个元素的直接方法?

标签: rregexstringsplit

解决方案


尝试前瞻并简化您正在寻找的内容:

提供了 R 特定的字符串转义。

(?=Table \\d+\\.)

确保启用perl=TRUE

https://regex101.com/r/Cpyu6k/1


推荐阅读