模糊字符串匹配和正则表达式

时间:2016-02-17 11:19:15

标签: regex r string-matching fuzzy-comparison

我有一个句子矢量,例如:

example <- c("text text word1 text text word2 text text", ...)

我正在尝试确定哪些句子符合以下规则:

  • 该句子包含“word1”和“word2”
  • “word1”出现在“word2”之前
  • “word1”和“word2”
  • 之间有0到3个字

这可以使用普通正则表达式完成。然而,问题是“word1”或“word2”可能包含拼写错误(对于两个单词,我预计最多距离为3)。拼写错误的例子可以是“wrod1”,“woord2”,“wrd1”等。我还想在距离约束内匹配包含这些单词的拼写错误的句子。因此我试图使用agrepl

agrepl("(?:.*?)\\bword1\\b(?:\\s(?:\\w+\\s){0,3})\\bword2\\b(?:.*?)", example, fixed=FALSE, max=3)

但是,我认为距离是用整个句子来计算的,而不仅仅是“word1”和“word2”,因此我几乎不会以这种方式得到任何匹配。有关如何解决此问题的任何建议,还是agrepl / regex不是解决此问题的最佳工具?

1 个答案:

答案 0 :(得分:2)

这适合您的规则,但我不确定您的拼写错误会是什么样子。如果你能展示一些例子,那就太好了。

^(?=.*word1\s+(?:\S+\s+){0,3}word2.*$).* DEMO