如何在字符串中搜索多字符串(完全匹配)?

时间:2015-06-05 10:55:48

标签: python regex string python-2.7

我发现了与此类似的问题,但它们并不是我想要的,因为它们询问特定和单数词而不是多重词。 我有一个字符串k(这是字典中的一个键),它由一个函数自动生成(取决于用户输入),它看起来像这样: “ condition1 ^ condition2 ^ condition3 ^ ...” (至少有一个条件)。

每个条件都如下所示:

  1. a> B'/ LI>
  2. a< = c
  3. b< a< = c
  4. 现在,我正在尝试做的是在k中搜索某个字符串,对于条件,我们说“a< = c”:如果k中的“a< = c”则.... 问题是可能有“aa”,“ba”,“aaa”,“ca”等而不是“a”,在这种情况下我不希望条件为True。我该如何处理?我一直在阅读re模块文档,但我很困惑

    更新 我最初按照alec_djinn的建议使用re.findall,根据我的需要调整它:

    '(?<![^\s])a <= c(?![^\s])'
    

    但我遇到了一些问题。 所以我决定不使用正则表达式,而是检查“a&lt; = c”是否等于任何

    g for g in [k.split()[g]+k.split()[g+1]+k.split()[g+2] for g in xrange(len(k.split())-2)]. 
    

    有效。 对此解决方案有何评论?

3 个答案:

答案 0 :(得分:2)

\ba <= c\b

您可以为re.search执行此操作。

答案 1 :(得分:2)

您可以使用(?<![a-z])表示&#34;如果前面没有任何小写字母&#34;。

这是一个例子。

import re

str_a = 'b a <= c'
str_b = 'ba <= c'

m = re.findall('(?<![a-z])a <= c', str_a)
n = re.findall('(?<![a-z])a <= c', str_b)
print m, n

打印:

['a <= c'] []

它只找到str_a的匹配,而不是str_b。

答案 2 :(得分:1)

我可能会使用vks的解决方案,这似乎是最简单的。但是,如果你想避免使用正则表达式并且你知道你的字符串在任何地方被单个空格分隔,你也可以这样做:

(' ' + condition + ' ') in (' ' + k + ' ')

您的解决方案涉及拆分字符串并重新组合它将起作用,但仅适用于3个元素字符串,并且需要更多时间和内存。