1

我有一个较短的字符串s,我试图匹配一个较长s1.的字符串 1 匹配 1,但 0 将匹配 0 或 1。

例如:

s = '11111' would match s1 = '11111'

s = '11010' would match s1 = '11111' or '11011' or '11110' or '11010'

我知道正则表达式会使这变得更容易,但对从哪里开始感到困惑。

4

3 回答 3

6

用 替换每个实例0[01]使其匹配01

s = '11010'
pattern = s.replace('0', '[01]')
regex = re.compile(pattern)

regex.match('11111')
regex.match('11011')
于 2013-04-01T18:50:02.817 回答
2

在我看来,您实际上是在寻找位算术

s = '11010'
n = int(s, 2)
for r in ('11111', '11011', '11110', '11010'):
    if int(r, 2) & n == n:
        print r, 'matches', s
    else:
        print r, 'doesnt match', s
于 2013-04-01T19:17:36.720 回答
1
import re

def matches(pat, s):
    p  = re.compile(pat.replace('0', '[01]') + '$')
    return p.match(s) is not None

print matches('11111', '11111')
print matches('11111', '11011')
print matches('11010', '11111')
print matches('11010', '11011')

你说“匹配一个更长的字符串 s1”,但你没有说你是想匹配字符串的开头还是结尾等。在我更好地理解你的要求之前,这会执行完全匹配。

于 2013-04-01T18:50:43.097 回答