【问题标题】:How to use regex rules to match string?如何使用正则表达式规则匹配字符串?
【发布时间】:2014-04-23 15:31:55
【问题描述】:

我正在尝试在我的搜索引擎中更多地使用正则表达式。请看:

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!"

任何帮助都会很棒。

【问题讨论】:

  • 用正则表达式做黑魔法?
  • 我已经通过简单的比较做到了,我认为正则表达式更强大!? ...但是忘记了循环,这很容易,但表达式列表让我很困扰。

标签: python regex search-engine


【解决方案1】:

“[from 0 to 1 any char]”的正则表达式很简单

.?

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

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

同样,广义量词{m,n} 指定“至少 m 次重复,最多 n 次重复”,因此您的“[从 0 到 2 任意字符]”翻译成正则表达式是.{0,2}

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

在 Python 中(就像大多数现代 Perl 派生的正则表达式方言一样),如果不希望使用正则括号的分组行为,您可以使用 (?: 而不是 (

【讨论】:

  • 为这个出色的解释点赞,也被接受了。此外,我将 mb/mega 编辑为 4mb/4mega 以更清晰,但我得到了图片。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
  • 2012-06-05
  • 2013-12-25
  • 1970-01-01
相关资源
最近更新 更多