Regular expression: match (aa | bb) (cc)?

My regex should be able to find strings:

  • Visual studio 2008
  • Visual Studio Express 2008
  • Visual basic 2008
  • Visual Basic Express 2008
  • Visual C ++ 2008
  • Visual C ++ Express 2008

and many other similar options that should be replaced with one single line

Visual studio 2005

I tried "Visual (Basic | C ++ | Studio) (Express)? 2008", but it does not work. Any ideas?

Edit : Now I tried "Visual (Basic) | (C ++) | (Studio) (Express)? 2008", but the replaced line becomes "Visual Studio 2005 Express 2008" to enter "Visual Basic Express 2008".

+3
source share
9 answers

It should be

"Visual (Basic|C\+\+|Studio)( Express)? 2008"

>>> import re
>>> repl = 'Visual Studio 2005'
>>> regexp = re.compile('Visual (Studio|Basic|C\+\+)( Express)? 2008')
>>> test1 = 'Visual Studio 2008'
>>> test2 = 'Visual Studio Express 2008'
>>> test3 = 'Visual C++ Express 2008'
>>> test4 = 'Visual C++ Express 1008'
>>> re.sub(regexp,repl,test1)
'Visual Studio 2005'
>>> re.sub(regexp,repl,test2)
'Visual Studio 2005'
>>> re.sub(regexp,repl,test3)
'Visual Studio 2005'
>>> re.sub(regexp,repl,test4)
'Visual C++ Express 1008'
+7

2 . . :

"Visual (Basic|C\+\+|Studio) (Express )?2008"

:

"Visual [^ ]+ (Express )?2008"
+3

(, +). , "express" .

+2

: "Visual (Basic | C\+\+ | Studio) (Express)? 2008"

+2

, :

Visual .+? 2008
+1

,

/visual (studio|basic|c\+\+)? (express)?\s?2008/i
+1

:

Visual (Basic|C\+\+|Studio)( Express)? 2008

"+" "++" ""

Python :

Visual (?:Basic|C\+\+|Studio)(?: Express)? 2008
0

:

Visual\s(Basic|C\+\+|Studio)(\sExpress)?\s2008
0
source

A very late answer, but I would like to answer. You can just try this.

/Visual.*2008/g

http://regex101.com/r/fI0yU1/1

0
source

Source: https://habr.com/ru/post/1697934/


All Articles