我有一组文件,其中包含(可能)不同类型的有序列表。我想将任何列表实例折叠为段落文本,并删除#out。即
1. Hello
(a) world
ii) 3000
This isn't in the list.
会变成:
Hello world 3000.
This isn't in the list.
我还可以想象将这些列表提取到单独的R对象中有用的情况(例如,我们可能想要获取文本,创建存储每个列表项的列表列表)。 (即,假设并发列表项位于同一列表中,之前的项目将成为列表中的3个项目。)
在Python
here中有关于此操作的一些指导,但我想知道如何在R
中操作此类列表。
到目前为止,我的尝试非常粗糙,例如建立在无序列表案例gsub("(\r?\n|\r)\\*", " ", stri1)
答案 0 :(得分:0)
如果您将文件作为一个字符串读取,则可以使用
解决该问题txt = "1. Hello\r\n(a) world\r\nii) 3000\r\nThis isn't in the list."
txt = gsub("(?m)[\r\n]*^(?:\\d+(?:\\.\\d+)*|\\(?[a-z]+\\))\\s+", " ", txt, perl=T)
lst = strsplit(txt, "\r?\n")
输出:
> txt
[1] "1. Hello world 3000\r\nThis isn't in the list."
> lst
[[1]]
[1] "1. Hello world 3000" "This isn't in the list."
正则表达式是
(?m)[\r\n]*^(?:\d+(?:\.\d+)*|\(?[a-z]+\))\s+
请参阅regex demo
(?m)
强制^
匹配行开始位置,[\r\n]*
匹配零个或多个\n
或\r
个字符,(?:\d+(?:\.\d+)*|\(?[a-z]+\))
匹配用点分隔的整数或数字,或者用(
和必修)
括起来的一个或多个字母。 \s+
匹配一个或多个空白符号。 如果字母/罗马数字可以为大写,请将(?m)
替换为(?mi)
。