我正在尝试使用正则表达式来解析使用正则表达式的文件。在 R 中使用正则表达式的大多数解决方案都使用 stringr 包。我还没有找到另一种方法,或者另一个可以使用的包。如果您有其他方法来解决此问题,那也是可以接受的。
我想要完成的是获取几个由空格分隔的值,最后一个值是一些逗号分隔的可变长度值。目前,这应该以类似表格的格式进入矩阵或 df 中。
foo foo_123bar foo,bar,bazz
foo2 foo_456bar foo2,bar2
我有我的正则表达式的工作示例here. https://regex101.com/r/yO4TpZ/2
我可能会遇到一些问题。第一个可能是我正在编写的正则表达式不受 R 的正则表达式引擎支持。虽然我有这样的感觉this http://www.rexegg.com/regex-disambiguation.html#define这将得到支持。我已经看到 R 使用类似 POSIX 的格式,这可以让事情变得有趣。第二个可能正是下面的错误消息所显示的内容。这还不是一个已被编码的功能。然而,这将是最麻烦的,因为如果没有这个包,我不知道另一种方法来解决我的问题。
下面是我用来复制此错误的 R 代码
library("stringr")
string = " foo foo_123bar foo,bar,bazz\n foo2 foo_456bar foo2,bar2,bazz2"
pattern = "
(?(DEFINE)
(?<blanks>[[:blank:]]+)
(?<var>\"?[[:alnum:]_]+\"?)
(?<csvar>(\"?[[:alnum:]_]+\"?,?)+)
)
^
(?&blanks)((?&var))
(?&blanks)((?&var))
(?&blanks)((?&csvar))"
# Both of these are throwing the error
str_extract_all(string, pattern)
str_extract_all(string, regex(pattern, multiline=TRUE, comments=TRUE))
> Error in stri_extract_all_regex(string, pattern, simplify = simplify, :
> Use of regexp feature that is not yet implemented. (U_REGEX_UNIMPLEMENTED)
# Using the example from ?str_extract_all runs without error
shopping_list <- c("apples x4", "bag of flour", "bag of sugar", "milk x2")
str_extract_all(shopping_list, "\\b[a-z]+\\b", simplify = TRUE)
我正在寻找一种解决方案,不一定是 stringr 解决方案,但这是我发现符合我的需求的唯一方法。其他更简单的 R 正则表达式函数仅接受模式,而不接受额外参数,包括我正在使用的多行和注释功能。