Regex 用于匹配R中各种类型的编号列表的正则表达式
我有一组文件,其中包含(可能)不同种类的有序列表。我想将所有列表实例折叠成段落文本,并去掉#。即Regex 用于匹配R中各种类型的编号列表的正则表达式,regex,r,list,gsub,Regex,R,List,Gsub,我有一组文件,其中包含(可能)不同种类的有序列表。我想将所有列表实例折叠成段落文本,并去掉#。即 1. Hello (a) world ii) 3000 This isn't in the list. 将成为: Hello world 3000. This isn't in the list. 我还可以想象将这些列表提取到一个单独的R对象中会很有用的情况(例如,我们可能想要获取一个文本,创建一个存储每个列表项的列表列表)。(即,假设并发列表项位于同一列表中,则先前的项目将成为列表中的3个项目
1. Hello
(a) world
ii) 3000
This isn't in the list.
将成为:
Hello world 3000.
This isn't in the list.
我还可以想象将这些列表提取到一个单独的R对象中会很有用的情况(例如,我们可能想要获取一个文本,创建一个存储每个列表项的列表列表)。(即,假设并发列表项位于同一列表中,则先前的项目将成为列表中的3个项目)
在Python
中有一些这样做的指导,但是我想知道如何在R
中操作这样的列表
到目前为止,我的尝试相当粗糙,例如,基于无序的列表大小写
gsub(“(\r?\n\r)\\\*”,“”,stri1)
如果将文件作为一个字符串读取,可以使用
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+
看
(?m)
强制^
匹配行起始位置,[\r\n]*
匹配零个或多个\n
或\r
字符,(?:\d+(?:\.\d+)***(?[a-z]+\)
匹配整数或用点分隔的数字,或一个或多个用点和可选括起来的字母(
和必选的)
。\s+
匹配一个或多个空格符号。如果字母/罗马数字可以是大写,请将(?m)
替换为(?mi)
如果以一个字符串形式读取文件,则可以使用
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+
看
(?m)
强制^
匹配行起始位置,[\r\n]*
匹配零个或多个\n
或\r
字符,(?:\d+(?:\.\d+)***(?[a-z]+\)
匹配整数或用点分隔的数字,或一个或多个用点和可选括起来的字母(
和必选的)
。\s+
匹配一个或多个空格符号。如果字母/罗马数字可以是大写,请将(?m)
替换为(?mi)
尝试gsub((?m)\n^[a-zA-Z0-9]+\\\\s+,“”,text,perl=T)
如果您将文本作为一个字符串来阅读。感谢@WiktorStribiżew,它适用于基于“x”的列表,我刚刚更新了链接Python页面上的示例,我还对其他类型的列表格式感兴趣,特别是(x)和(x)符号。因此我们有a/I/1/1.1编号,加上(),和。因此,这进一步了一点,但(x)仍然保留,在“1.1”风格上,第二位数字没有被删除。在“1.1.1”风格上,第二位数字没有被删除:gsub((x)保留,在“1.1”风格上,第二位数字没有被删除:gsub(“gsub(\\s(\\r(?m)s(\\r(m)m)m)n?^[a-zA-zA-zA-zA-zA-zA-zA-zA-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-\.+[a-zA-Z0-9]|\\r(?m)\本次(a-zA-zA-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-9]+\\\ n?^[a-zA-zA-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-[a-zA-Z0-9]+\\\\\\\n(?m)\r?^[a-zA-Z0-9]+\\\\\\\n(?m)\r?^[a-zA-Z0-9]+\\\\\\\\\n(?m)\\r?\\\\([a-zA-Z0-9]+\\)|\\r(?m)\\n?\\\([a-zA-Z0-9]+\\),“”,test,perl=T)
将它们读入列表也会很有趣(但这肯定超出了我现在的能力)尝试gsub((?m)\\\[a-zA-Z0-9]+\\。\\s+,“”,text,perl=T)
如果您将文本作为一个字符串来阅读。谢谢@WiktorStribiżew,这对基于“x”的列表有效,我刚刚更新了链接Python页面上的示例,我还对其他类型的列表格式感兴趣,特别是(x)和(x)符号。我们有a/i/1/1.1编号,加上(),和。因此,这进一步了一点,但(x)仍然保留,在“1.1”风格上,第二位数字没有被删除。在“1.1.1”风格上,第二位数字没有被删除:gsub((x)保留,在“1.1”风格上,第二位数字没有被删除:gsub(“gsub(\\s(\\r(?m)s(\\r(m)m)m)n?^[a-zA-zA-zA-zA-zA-zA-zA-zA-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-\.+[a-zA-Z0-9]|\\r(?m)\本次(a-zA-zA-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-9]+\\\ n?^[a-zA-zA-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-Z0-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-9-[a-zA-Z0-9]+\\\\\\\n(?m)\r?^[a-zA-Z0-9]+\\\\\\\n(?m)\r?^[a-zA-Z0-9]+\\\\\\\\\n(?m)\\r?\\\\([a-zA-Z0-9]+\\)|\\r(?m)\\n?^\([a-zA-Z0-9]+\\)“,”,test,perl=T)
将它们读入列表也会很有趣(但这肯定超出了我现在的能力)谢谢,我想我预期的列表会导致:[[1][1]你好[2]世界[3]3000任何后续的字符列表都会创建新的列表Gsub
创建一致的列表类型(例如,所有1.2.3等)可能是明智的,然后我忘记了strsplit
,它可以读入[0-9]或其他一些句子,我认为我预期的列表会导致:[[1]][1]你好[2]世界[3]3000任何后续的字符列表都会创建新的列表Gsub
创建一致的列表类型(例如所有1.2.3等)可能是明智的,然后我忘记了可以读入[0-9]或其他内容的strsplit