2008-10-06 72 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