我的正则表达式需要能够找到字符串:
以及许多其他类似的变体,将被这一个单独的字符串替换
Visual Studio 2005
我试过“Visual(Basic | C ++ | Studio)(Express)?2008”,但它没有用。有什么想法吗?
修改 : 现在我尝试了“Visual(Basic)|(C ++)|(Studio)(Express)?2008”,但替换后的行变为“Visual Studio 2005 Express 2008”输入“Visual Basic Express 2008”。
答案 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)