当前位置: 首页 > 知识库问答 >
问题:

在R中Grep查找具有自定义"扩展"边界的单词

彭宏阔
2023-03-14

我正在寻找一个正则表达式来grep整个单词,包括由数字或下划线分隔的单词。\\b认为数字和下划线是单词的一部分,而不是边界。

例如,我想在“DOG-MOUSE-CAT”、“DOG-MOUSE:CAT”和“DOG\u-MOUSE9CAT”以及表达式的结尾或开头捕捉鼠标,如“MOUSE9CAT”和“DOG\u-MOUSE”。基本上,我要查找的边界是任何非大写字母字符加上行/表达式的开头和结尾(这里可能缺少\\b捕获的一些其他大小写)。

我尝试过:

"[[0-9_]\\b]MOUSE[[0-9_]\\b]"
"[[0-9_]|\\b]MOUSE[[0-9_]|\\b]"
"[$|[^A-Z]]MOUSE[^|[^A-Z]]"
"[?<=^|[^A-Z]]MOUSE[?=$|[^A-Z]]"

它们都不起作用。

我实际上在寻找几个单词(基于一个长的值向量),所以最终结果应该看起来像

grep(paste("\\b", paste(searchwords, collapse = "\\b|\\b"), "\\b"), targettext)

(使用不同的分隔符,因为\\b对我来说太严格了)。

(这与用户Nick Sabbe在这里的评论中提出的问题类似:在R中使用grep查找字符串作为整个单词(而不是字符串作为单词的一部分))

共有1个答案

薛滨海
2023-03-14

将PCRE正则表达式与lookarounds一起使用:

grep("(?<![A-Z])MOUSE(?![A-Z])", targettext, perl=TRUE)

查看正则表达式演示

<代码>(?

要将环顾法应用于所有备选方案,请使用外部分组(?:…|…)

请参阅R在线演示:

> targettext <- c("DOG MOUSE CAT","DOG MOUSE:CAT","DOG_MOUSE9CAT","MOUSE9CAT","DOG_MOUSE")
> searchwords <- c("MOUSE","FROG")
> grep(paste0("(?<![A-Z])(?:", paste(searchwords, collapse = "|"), ")(?![A-Z])"), targettext, perl=TRUE)
[1] 1 2 3 4 5

 类似资料:
  • 问题内容: 我正在尝试查找具有特定扩展名的文件。例如,我要查找所有名为Robert的.pdf和.jpg文件 我知道我可以执行此命令 但是我需要指定扩展名之外的文件本身的名称。我只是想看看是否有一种避免重复写入文件名的方法,谢谢! 问题答案: 我的偏好:

  • 目前 Mars 支持自定义 xlog 的加密部分和长短连协议加解包部分。需要强调的是想要自定义这些扩展,需要在本地编译 Mars 才可以,编译方法见 Mars Android 接入指南 和 Mars iOS/OS X 接入指南 中的编译部分。切记,在自定义实现时,可以增加函数,但是不能删除头文件中已有的函数,也不能修改头文件中的函数原型。 自定义 xlog 加密 xlog 的具体实现可以参考微信终

  • 问题内容: 我为应用程序提供了一些自定义颜色,现在将其保存为字典,但是我认为这并不是一个好主意,我想使用自定义颜色对UIColor进行扩展。 可能看起来像这样 也许我应该添加一个带有我的颜色的枚举? 问题答案: 在UIColor扩展中创建类属性 要么 用法

  • 问题内容: 我正在使用fileBrowser在手机上查找文件,但是我想向用户显示我的应用程序可以打开的所有文件,然后用户选择一个。就像音乐播放器一样,它不仅可以显示用户所在文件夹中的歌曲,还可以显示手机,SD卡和内存中的所有歌曲。 问题答案: 在列出文件时使用文件名过滤器。以下示例列出了给定目录中的所有mp3文件(注意-以下代码未对之下的所有文件夹进行递归处理)-

  • 问题内容: 我正在阅读另一个SO问题,即Swift do-try-catch语法。在他的回答中, rickster 为OP的自定义类创建了扩展。 Konrad77 评论说,这是“保持代码整洁的好方法。” 我尊重他们的知识,这使我相信我在自己的代码中遗漏了一点。 除了为我创建的类创建扩展之外,还有其他好处(除了整洁)还是原因?我可以将相同的功能直接放入类中。如果我是唯一使用该类的人,或者其他人将使用

  • 使用正则表达式匹配表达式 为什么这两个示例匹配如下(突出显示): c# < code>a #b #c #d 具体来说,为什么第一个字符串不匹配包含最后一个#之前的所有内容? 由于单词边界(\b)是零宽度匹配,可以在单词字符(\w)和非单词字符(\ w)之间匹配,或者在单词字符和字符串的开始或结束之间匹配,我不确定以非单词字符结束表达式会如何影响匹配。