我有一个较短的字符串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'
我知道正则表达式会使这变得更容易,但对从哪里开始感到困惑。
用 替换每个实例0
以[01]
使其匹配0
或1
:
s = '11010'
pattern = s.replace('0', '[01]')
regex = re.compile(pattern)
regex.match('11111')
regex.match('11011')
在我看来,您实际上是在寻找位算术
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
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”,但你没有说你是想匹配字符串的开头还是结尾等。在我更好地理解你的要求之前,这会执行完全匹配。