2008-10-06 198 views
3

我的正则表达式需要能够找到字符串:正则表达式:与(aa | bb)(cc)相匹配?

  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

和主机其他类似的变种,与这一个单一的字符串

Visual Studio 2005中

代替我试过“视觉(基本| C++ |工作室)(快递)? 2008" 年,但它是不工作的任何想法

编辑: 现在,我已经尝试过 “?视觉(基本)|(C++)|(工作室)(快递)2008年”,但被替换的行变成“Visual Studio 2005 Express 2008”用于输入“Visual Basic Express 2008”

回答

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' 
+0

谢谢,这就是答案。有时正则表达式可能有点令人困惑:) – Graviton 2008-10-06 15:11:58

+0

哇,这正是我所说的,没有勺子喂养。 O well ... – leppie 2008-10-06 15:34:43

2

您需要转义特殊字符(如+),并且'express'位应该在两边都有空格。

3

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

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

根据输入,这可能是足够使用:

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

试试这个: “可视化(基本| C \ + \ + |工作室)(快递)2008年”

0

与尝试:

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

就是引用“+”的“C++”,包括在“快车”的空间

因为它是Python和你不需要括号部分:

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

这是更明确用空格:

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

除非你的样品输入充斥着各种各样的关键字排列,可以极大这个简化它:

Visual .+? 2008 
1

我想这应该工作

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