Home > Back-end >  regex a before b with and without whitespaces
regex a before b with and without whitespaces

Time:03-08

I am trying to find all the string which include 'true' when there is no 'act' before it.

An example of possible vector:

vector = c("true","trueact","acttrue","act true","act really true")

What I have so far is this:

grepl(pattern="(?<!act)true", vector, perl=T, ignore.case = T)
[1]  TRUE  TRUE FALSE  TRUE  TRUE

what I'm hopping for is

[1]  TRUE  TRUE FALSE  FALSE  FALSE  

CodePudding user response:

May be this works - i.e. to SKIP the match when there is 'act' as preceding substring but match true otherwise

grepl("(act.*true)(*SKIP)(*FAIL)|\\btrue", vector, 
     perl = TRUE, ignore.case = TRUE)
[1]  TRUE  TRUE FALSE FALSE FALSE

CodePudding user response:

Here is one way to do so:

grepl(pattern="^(.(?<!act))*?true", vector, perl=T, ignore.case = T)
[1]  TRUE  TRUE FALSE FALSE FALSE

  • ^: start of the string
  • .: matches any character
  • (?<=): negative lookbehind
  • act: matches act
  • *?: matches .(?<!act) between 0 and unlimited times
  • true: matches true

see here for the regex demo

  • Related