如何使用正则表达式规则来匹配字符串?

时间:2014-04-23 07:16:04

标签: python regex search-engine

我想在我的搜索引擎中更多地使用regEx。请看一下:

someStr = "Processor AMD Athlon II X4 651K BOX Black Edition, s. FM1, 3.0GHz, 4MB cache, Quad Core"

# THIS SHOULD MATCH / processors-plural with 0 to 1,
# mega or mb should be the same
# and quad with 0 to 2 of any characters except whitespace
queryListTrue = ["processors", "amd", "4mega", "quaddy"]

# THIS SHOULDN'T MATCH / bad last item length
queryListFalse = ["processors", "amd", "4mb", "quaddie"]

# TO DESCRIBE WHAT I NEED
rulesList = [ r'processor[i.e. 0-1 char]', r'amd',
            r'4mega or 4mb', r'quad[from 0 to 2 any char]' ]

if ALL queryListTrue MATCHES someStr THRU rulesList : 
        print "What a wonderful world!"

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:2)

" [从0到1任何字符]的正则表达式"简直就是

.?

即。点.匹配任何字符(默认情况下除了换行符),?量词表示前面的表达式是可选的。

请注意,processor.?也会匹配processor之后的空格或processord之类的任意字符。您可能打算processors?复数s是可选的,或者processor[a-z]?可以将可选的最后一个字符约束为字母字符。

同样,广义量词{m,n}指定"至少 m 重复且最多 n 重复",所以你的&#34 ; [从0到2任何字符]"翻译为正则表达式是.{0,2}

正则表达式中的替换是使用|指定的,因此mega|mb是您的" mega或mb"的正则表达式。如果在较长的上下文中使用交替,其中某些文本不会更改,则需要添加括号以限制交替,例如m(ega|b)

在Python中(与大多数现代Perl派生的正则表达式方言一样),如果不需要常规括号的分组行为,则可以使用(?:代替(