正则表达式:匹配到(aa | bb)(cc)?

时间:2008-10-06 14:57:22

标签: regex

我的正则表达式需要能够找到字符串:

  1. Visual Studio 2008
  2. Visual Studio Express 2008
  3. Visual Basic 2008
  4. Visual Basic Express 2008
  5. Visual C ++ 2008
  6. Visual C ++ Express 2008
  7. 以及许多其他类似的变体,将被这一个单独的字符串替换

      

    Visual Studio 2005

    我试过“Visual(Basic | C ++ | Studio)(Express)?2008”,但它没有用。有什么想法吗?

    修改 : 现在我尝试了“Visual(Basic)|(C ++)|(Studio)(Express)?2008”,但替换后的行变为“Visual Studio 2005 Express 2008”输入“Visual Basic Express 2008”。

9 个答案:

答案 0 :(得分:7)

应该是

"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'

答案 1 :(得分:3)

在没有Express的情况下,您需要在一年之前寻找2个空格。那不好。试试这个:

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

根据输入的不同,使用可能就足够了:

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

答案 2 :(得分:2)

您需要转义特殊字符(例如+)。 “快速”位也应该在两边都有空格。

答案 3 :(得分:2)

试试这个:“Visual(Basic | C \ + \ + | Studio)(Express)?2008”

答案 4 :(得分:1)

除非您的示例输入充斥着关键字的各种排列,否则您可以极大地简化它:

Visual .+? 2008

答案 5 :(得分:1)

我认为这应该有效

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

答案 6 :(得分:0)

尝试:

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

即引用“C ++”的“+”并在“Express”中包含空格

因为它是Python而你不需要带括号的部分:

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

答案 7 :(得分:0)

对于空格更明确:

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

答案 8 :(得分:0)

答案非常晚,但想回答。你可以试试这个

/Visual.*2008/g

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