如何在换行符处终止我的模式?
How do I terminate my pattern at a line break?
我有一个来自我要处理的 pdf 的长字符。
我有 Table X. Name of the table
的重复实例,在我的角色中总是跟着 \r\n
但是,当我尝试使用 List_Tables <-str_extract_all(Plain_Text, "Table\s+\d+\.\s+(([A-z]|\s))+\r\n")
提取列表中的所有表格时,我确实经常有另一行仍在提取中,例如
> List_Tables
[[1]]
[1] "Table 1. Real GDP\r\n Percentage changes\r\n"
[2] "Table 2. Nominal GDP\r\n Percentage changes\r\n"
我的代码中遗漏了什么?
\s
匹配所有空格,包括换行符! 与贪婪量词 +
结合使用时,这意味着 (([A-z]|\s))+
匹配,在你的第一个例子中,
Real GDP\r\n […] Percentage changes\r\n
解决此问题的最简单方法是使用非贪婪量词:即 +?
而不是 +
。
为了完整起见,我会提到还有其他选择,但它们会变得更加复杂。例如,您可以使用否定断言来包含“if”测试以匹配不是换行符的空格;或者您可以使用字符 class [ \t]
而不是 \s
,这更严格但也更明确并且可能更接近您想要的。
我有一个来自我要处理的 pdf 的长字符。
我有 Table X. Name of the table
的重复实例,在我的角色中总是跟着 \r\n
但是,当我尝试使用 List_Tables <-str_extract_all(Plain_Text, "Table\s+\d+\.\s+(([A-z]|\s))+\r\n")
提取列表中的所有表格时,我确实经常有另一行仍在提取中,例如
> List_Tables
[[1]]
[1] "Table 1. Real GDP\r\n Percentage changes\r\n"
[2] "Table 2. Nominal GDP\r\n Percentage changes\r\n"
我的代码中遗漏了什么?
\s
匹配所有空格,包括换行符! 与贪婪量词 +
结合使用时,这意味着 (([A-z]|\s))+
匹配,在你的第一个例子中,
Real GDP\r\n […] Percentage changes\r\n
解决此问题的最简单方法是使用非贪婪量词:即 +?
而不是 +
。
为了完整起见,我会提到还有其他选择,但它们会变得更加复杂。例如,您可以使用否定断言来包含“if”测试以匹配不是换行符的空格;或者您可以使用字符 class [ \t]
而不是 \s
,这更严格但也更明确并且可能更接近您想要的。