我有一个包含文本的向量,分解如下:
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}?
是一个惰性量词,匹配修改后的子模式的一到六次出现(尽可能少,但仍然尽可能多,以找到有效匹配(。这意味着dummy
和text
之间必须至少有一个字。
所以,你需要使用
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
-一个词的边界