Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python RegEx for exact matches of brackets

I am trying to parse a string which is of the following format:

 text="some random string <inAngle> <anotherInAngle> [-option text] [-anotherOption <text>] [-option (Y|N)]" 

I want to split the string in three parts.

  1. Just the "some random string"
  2. Everything that is ONLY in angle brackets. I.E inAngle and anotherInAngle above.
  3. Everything that is in square brackets.

If I use the RegEx

re.findall(r'\[(.+?)\]', text)

It gives everything I need within square brackets. If I use the same RegEx with angle brackets however,

re.findall(r'<(.+?)>', text)

It gives the text which is within angle bracket that are within square brackets too. So for example "text" from above which is within [-anotherOption]. I do not want that. The RegEx for angle bracket match should only return "inAngle" "anotherInAngle" from above. What would be the RegEx for it?

Also how do I get only the first part i.e "some random string". This string can have 2 or 3 number of words

like image 472
user775093 Avatar asked Oct 18 '22 22:10

user775093


1 Answers

Try if this regex would capture what you need

\s*([^><[\]]+\b)|\[([^]]*)]|<([^>]*)>
  • \s* preceded by optional whitespace
  • ([^><[\]]+\b) Group 1: Any non brackets until \b (remove if undesired)
  • |\[([^]]*)] or Group 2: What's inside square brackets
  • |<([^>]*)> or Group 3: What's inside angle brackets

See demo at regex101 (use "code generator" if needed)

like image 160
bobble bubble Avatar answered Oct 21 '22 15:10

bobble bubble