<p>据我所知,正则表达式在一维数组中使用时是有用的,而不是像问题中那样用于二维数组。在</p>
<p>所以我倾向于说,使用正则表达式可能不是一个好方法。。。我试图将一个固定的图案与<code>G</code>在<code>+</code>图案中的位置相匹配,每个手臂都有1个单位长:</p>
<pre><code>B = 0
G = 1
matrix = (
(B, G, B, B, G, B),
(G, G, G, G, G, G),
(B, G, B, B, G, B),
(B, G, B, B, G, B),
(G, G, G, G, G, G),
(B, G, B, B, G, B),
)
pattern = (
(B, G, B),
(G, G, G),
(B, G, B),
)
def getMatrixSize(mat):
# Return (width, height)
return (len(mat[0]), len(mat))
def findPattern(mat, pat):
matches = []
matsize = getMatrixSize(mat)
patsize = getMatrixSize(pat)
for y in range(matsize[1] - patsize[1] + 1):
for x in range(matsize[0] - patsize[0] + 1):
submat_cols = mat[y:y+patsize[1]]
for i in range(patsize[1]):
submat_row = submat_cols[i][x:x+patsize[0]]
if submat_row != pat[i]:
i = -1
break
if i > 0:
matches.append((x, y))
return matches
# Run the thing
print(findPattern(matrix, pattern))
</code></pre>
<p>我的想法是在矩阵上滑动模式,然后在矩阵的每个子段上比较模式的每个片段。。。在</p>
<p>现在这是某种模式的“硬编码”。<br/>
但你可以从这一点出发,尝试让模式发展(不同的手臂长度)</p>
<p><strong>注意</strong>:问题在于,使用正则表达式,您不能执行<code>\w{A}.\w{A}</code>这样的操作,<code>A</code>将是一个共享计数器。。。至少我从没听说过。在</p>