r-使用NEAR正则表达式搜索文本



我有一个包含文本的向量,分解如下:

words =  c("Lorem Ipsum is simply dummy text of the", "printing and typesetting industry. Lorem Ipsum has been the industrys 
standard dummy text ever since the 1500s", "when an unknown printer took a galley of type and scrambled it to 
make a type specimen book.", "It has survived not only five ,centuries, but also the leap into electronic")

我使用下面的正则表达式来查找单词";伪";以及";文本";出现在6个单词以内:

grep("b(?:dummy\W+(?:\w+\W+){1,6}?text|text\W+(?:\w+\W+){1,6}?dummy)b", words)

然而,尽管第一个索引中存在"伪文本",它仍返回0。

知道我哪里错了吗?

"b"中的b与退格字符匹配,需要对b\b进行双转义,使其与单词边界匹配。

修复拼写错误后,您需要注意限定量词{1,6}?是一个惰性量词,匹配修改后的子模式的一到六次出现(尽可能少,但仍然尽可能多,以找到有效匹配(。这意味着dummytext之间必须至少有一个字。

所以,你需要使用

pattern <- "\b(?:dummy\W+(?:\w+\W+){0,6}text|text\W+(?:\w+\W+){0,6}dummy)\b"

请参阅regex演示。

详细信息

  • b-一个词的边界
  • (?:-非捕获组的启动
    • dummy-一个dummy单词
    • W+-一个或多个非单词字符
    • (?:w+W+){0,6}-出现零到六次一个或多个单词字符,后跟一个或更多非单词字符
    • text-一个text
  • |-或
    • text-一个text单词
    • W+-一个或多个非单词字符
    • (?:w+W+){0,6}-出现零到六次一个或多个单词字符,后跟一个或更多非单词字符
    • dummy-一个dummy
  • )-非捕获组结束
  • b-一个词的边界

最新更新