Python:在字符串中查找模式

时间:2015-05-20 19:02:44

标签: python string

我正在尝试找到一种方法来匹配python中字符串s中的模式p。

s = 'abccba'
ss = 'facebookgooglemsmsgooglefacebook'
p = 'xyzzyx'
# s, p -> a, z  # s and p can only be 'a' through 'z'

def match(s, p):
   if s matches p:
      return True
   else:
      return False

match(s, p) # return True
match(ss, p) # return True

我刚试过:

import re

s = "abccba"
f = "facebookgooglemsmsgooglefacebook"
p = "xyzzyx"

def fmatch(s, p):
    p = re.compile(p)
    m = p.match(s)
    if m:
        return True
    else:
        return False

print fmatch(s, p)
print fmatch(f, p)

两者都是假的;他们应该是真的。

4 个答案:

答案 0 :(得分:3)

我将您的模式转换为正则表达式,然后由re.match使用。例如,您的xyzzyx变为(.+)(.+)(.+)\3\2\1$(每个字母的第一个匹配项成为捕获组(.+),后续出现的内容将成为正确的后向引用。

import re

s = 'abccba'
ss = 'facebookgooglemsmsgooglefacebook'
p = 'xyzzyx'

def match(s, p):
    nr = {}
    regex = []
    for c in p:
        if c not in nr:
            regex.append('(.+)')
            nr[c] = len(nr) + 1
        else:
            regex.append('\\%d' % nr[c])
    return bool(re.match(''.join(regex) + '$', s))

print(match(s, p))
print(match(ss, p))

答案 1 :(得分:1)

如果我理解你的问题,那么你正在寻找一种pythonic方法来对一组字符串进行模式匹配。

这是一个示例,演示了使用列表推导来实现这一目标。

我希望它可以帮助您实现目标。如果我能进一步帮助,请告诉我。 - JL

证明找不到匹配

>>> import re
>>> s = ["abccba", "facebookgooglemsmsgooglefacebook"]
>>> p = "xyzzyx"
>>> result = [ re.search(p,str) for str in s ] 
>>> result
[None, None]

在结果中展示匹配和不匹配的组合

>>> p = "abc"
>>> result = [ re.search(p,str) for str in s ] 
>>> result
[<_sre.SRE_Match object at 0x100470780>, None]
>>> [ m.group(0) if m is not None else 'No Match' for m in result ]
['abc', 'No Match']
>>> [ m.string if m is not None else 'No Match' for m in result ]
['abccba', 'No Match']

演示单一陈述

>>> [ m.string if m is not None else 'No Match' for m in [re.search(p,str) for str in s] ]
['abccba', 'No Match']

答案 2 :(得分:0)

为某些感兴趣的模式编译Python正则表达式对象,然后将该字符串传递给其Match(string)方法。如果需要布尔输出,则需要使用match对象:https://docs.python.org/3/library/re.html#match-objects

示例:检查字符串s是否包含任何单词字符(即字母数字)

def match_string(s):
    ##compile a regex for word characters
    regex = re.compile("\\w") 
    ##return the result of the match function on string 
    return re.match(s)

希望它有所帮助!

答案 3 :(得分:-1)

您可以使用正则表达式。
在这里查看一些示例:Link

我认为你可以使用re.search()

Ecample:

import re 

stringA = 'dog cat mouse'
stringB = 'cat'

# Look if stringB is in stringA
match = re.search(stringB, stringA)

if match:
    print('Yes!')