R中regex模式的所有可能组合

eh57zj3b  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(106)

如何从下面的正则表达式模式中得到所有可能的组合?
"(ost|west)europäisch(*$|e(*$|r|s|n|m))"
我想得到一个像这样的向量:

[1] "osteuropäisch"    "westeuropäisch"   "osteuropäische"   "westeuropäische" 
[5] "osteuropäischer"  "westeuropäischer" "osteuropäisches"  "westeuropäisches"
[9] "osteuropäischen"  "westeuropäischen" "osteuropäischem"  "westeuropäischem"

从下面的question中,我了解到我可以使用以下函数获得所有组合:

do.call(paste0, expand.grid(
   c("ost","west"),
   "europäisch",
   c("", paste0("e", c("", "r", "s", "n", "m"))))
)

但是,我有大量不同的正则表达式模式需要转换成完整的字符串,因此,我想知道是否有任何R的函数或包可以将正则表达式转换成所有可能组合的向量。

到目前为止,我还没有在basestringistringr中找到任何显式函数
从一个similar question on regex combinations in python,我知道对于python来说exrex模块是存在的,我在想也许对于R来说存在类似的东西,但是我找不到?

xam8gpfp

xam8gpfp1#

这几乎适用于你的例子-你可以很容易地把它封装在一个函数中。我不知道它是否会在不同的/更奇特的例子中崩溃...
(This不太适用于“e”前面的“*$”:例如,是“westeuropäischm”,没有“e”之间的“h”和“m”不应该是一个选项?

str <- "(ost|west)europäisch(*$|e(*$|r|s|n|m))"
s1 <- strsplit(str, "[()]")[[1]]
s1 <- s1[nzchar(s1)]
s2 <- strsplit(s1, "\\|")
s2 <- lapply(s2, gsub, pattern = "\\*|\\$", replacement = "")
s3 <- do.call(expand.grid, s2)
res <- apply(s3, 1, paste, collapse = "")

检查:

grepl(str, res)

(还不太管用)

相关问题