Karl Broman的文章:https://kbroman.wordpress.com/2015/06/22/randomized-hobbit-2/ 激发了我对正则表达式和ngrams的兴趣,只是出于好玩的心情。我尝试使用正则表达式来提取双字母组合。虽然知道有解析器可以完成这个工作,但我对正则表达式的逻辑很感兴趣(也就是说,这是一个自我挑战,但我失败了)。
下面给出一个最简示例和期望的输出结果。我的尝试中存在两个问题:
希望的输出:
下面给出一个最简示例和期望的输出结果。我的尝试中存在两个问题:
克隆(单词)被消耗掉了,不能在下一次使用。 如何使它们在第二次使用时可用? (例如,我希望在
I like
中已经使用过like
后,like toast
仍然可用)我无法使单词之间的空格不被捕获(请注意我的输出中的尾随空格,即使我使用了
(?:\\s*)
)。如何不捕获第n个(在这种情况下是第二个)单词的尾随空格? 我知道可以通过简单地使用:"(\\b[A-Za-z']+\\s)(\\b[A-Za-z']+)"
来完成2-gram,但我想将解决方案扩展到n-gram。 PS我知道\\w
,但我不认为下划线和数字是单词部分,但认为'
是单词部分。
MWE:
library(stringi)
x <- "I like toast and jam."
stringi::stri_extract_all_regex(
x,
pattern = "((\\b[A-Za-z']+\\b)(?:\\s*)){2}"
)
## [[1]]
## [1] "I like " "toast and "
希望的输出:
## [[1]]
## [1] "I like" "like toast" "toast and" "and jam"
"(\\b[A-Za-z']+\\s+){1}(\\b[A-Za-z']+)"
,通过将 1 调整为n-1
来扩展正则表达式。 - Tyler Rinker