首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中查找,以便按顺序识别单词的模式

在R中查找,以便按顺序识别单词的模式
EN

Stack Overflow用户
提问于 2017-10-07 17:05:00
回答 1查看 309关注 0票数 3

我正试图解析一组字符串。我需要找出样品中是否检测到'bcl-2‘。例如:“在45%的患者中检测到bl-2”。然而,有一些可能的变化是具有挑战性的:

1. 45%的bcl-6是而非检测到bcl-2。

  1. "bcl-2为而非,检测到bcl-6的阳性率为45%“
  2. “45%检出bcl-2 bcl-6的证据”

因此,我试图定义regex代码,以便:

  1. 展望'bcl-2‘
  2. 然后,从那个点开始寻找“检测到的”
  3. 然后查看后面的 'bcl-2‘和’检测‘之间,以确保没有’不‘。
  4. 如果可能的话,看看后面的 'bcl-2‘,以确保’没有证据‘(虽然我可以单独处理这个情况)。

我尝试了下面的代码,但不起作用。具体来说,它不回头看,所以我猜想,有一些内在的东西,我错过了。

该判据适用于"bcl-2未检测到bcl-2“,而"bcl-2在45% bcl-6未检测到bcl-6未检测到”则未检测到bcl-2。

代码语言:javascript
复制
y="bcl-2 was detected in 45% bcl-6 was not detected"
grepl("(?=bcl-?2)(?!.*not)(?=.*detected)",y, ignore.case = T,perl=T)  

所以我以为这会成功,但却没有:

代码语言:javascript
复制
grepl("(?=bcl-?2)(?=.*detected)(?<!not)",y, ignore.case = T,perl=T)

我正在努力理解背后的逻辑。关于最后一行代码->,我认为(?=bcl-?2)期待到字符串中以'bcl-2‘开头的点。然后,我认为(?=.*detected)期待到字符串中“检测到”开始的位置。然后,我想回头看,从那个位置开始寻找‘不’。这当然是错误的..。那么我错过了什么关于查找逻辑

顺便说一句,我一直在使用一个伟大的网站,试图找出这个https://www.regular-expressions.info/recurse.html

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-07 17:56:13

查找是零宽度断言,这意味着当模式匹配时regex索引没有移动(匹配的字符没有添加到匹配值中,并且连续的查找都从相同的位置开始它们的模式检查)。因此,(?=bcl-?2)(?!.*not)(?=.*detected)匹配一个空位置(空字符串),该位置后面跟着是bcl2bcl-2,在除行中断字符之外的任何0+字符之后没有not子字符串,在除行中断字符之外的任何0+字符之后都是detected。此模式在输入字符串中的每个位置尝试,因为没有锚点。这种模式很难满足你的需要。

以下是一个可能的解决方案:

代码语言:javascript
复制
\bbcl-2\b(?:(?!\bbcl-\d|\bnot\b).)*?\bdetected\b

regex演示

  • \b -一个单词边界
  • bcl-2 -一个bcl-2子字符串
  • \b -一个单词边界
  • (?:(?!\bbcl-\d|\bnot\b).)*? - (a 脾气暴躁的象征)除行中断字符以外的任何0+ (但尽可能少)字符,这些字符不会启动以下两个序列:
    • \bbcl-\d - wor边界,后面跟着bcl-和一个数字
    • | -或
    • \bnot\b -一个完整的词not

  • \bdetected\b -一个完整的词detected

请参见下面的R演示

代码语言:javascript
复制
x <- c("bcl-2 was detected in 45% bcl-6 was not detected", 
"bcl-2 was not detected bcl-6 was detected in 45%",
"no evidendce of bcl-2 bcl-6 was detected in 45%")
grep("\\bbcl-2\\b(?:(?!\\bbcl-\\d|\\bnot\\b).)*?\\bdetected\\b", x, perl=TRUE, value=TRUE)
## => [1] "bcl-2 was detected in 45% bcl-6 was not detected"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46622881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档