我想在我的搜索引擎中更多地使用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!"
任何帮助都会很棒。
答案 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派生的正则表达式方言一样),如果不需要常规括号的分组行为,则可以使用(?:
代替(
。