Home > Software design >  Regex pattern that will not match the brackets at the end of the string
Regex pattern that will not match the brackets at the end of the string

Time:04-06

From a large list of text I want to get only these lines:

Ks 2 ... No brackets at the end!
Ks 2 ... (/R)

So from an example as below:

Ks 2 an wo co lo
Ks 2 ni ta ko shi (/R)
Ks 2 fa ki de so (R)
Ks 1 ha lo pa 

Pattern should match:

Ks 2 an wo co lo
Ks 2 ni ta ko shi (/R)

I have tried to create something like this: Ks 2(.*)\(\/R\)|Ks 2(.*)(^(\(\/R\))$

Can anyone help me how to create this pattern ?!

CodePudding user response:

You can use

^Ks 2.*(?:\(/R\)|[^)])$
^Ks 2.*(?:\(/R\)|(?<!\)))$

See this regex demo (or this demo).

Note: If you deal with multiline texts, add \r? before $ and add (?m) at the start of the pattern. Also, replace [^)] with [^)\n] in the first pattern. E.g. (?m)^Ks 2.*(?:\(/R\)|[^)\r\n])\r?$ and (?m)^Ks 2.*(?:\(/R\)|(?<!\)\r?))\r?$.

Details:

  • ^ - start of a string
  • Ks 2 - a fixed string
  • .* - any zero or more chars other than line break chars as many as possible
  • (?:\(/R\)|[^)]) - either (/R) or a char other than )
  • $ - end of string.
  • Related