<p>我会选择使用类似矩阵的方法来解决这个问题,而不是使用正则表达式。
在您的示例中,我假设<code>l</code>是一个类似于包含每一行数据的列表。在</p>
<pre><code>import pandas as pd
import numpy as np
def findPlusSigh(data, pattern):
# Find indexes which match the pattern
data = data == pattern
pattern_index = data.nonzero()
# List to store result
result = []
center_index = []
# Loop over each matched element
for i, j in zip(pattern_index[0], pattern_index[1]):
# Look for arm length from 1 to 100
for m in range(1, 100):
try:
# Break the loop if it's out of range of the data
if m > i or m > j:
break
# check the matched pattern in 4 directions, i.e., up, left,
# down, right
if (all(data[([i-m, i, i+m, i], [j, j-m, j, j+m])])):
pass
else:
break
except:
break
# If arm length >= 1
if m > 1:
# When the loop breaks, m is 1 more than the actual arm length
# So we need to minus 1
# Record the arm length
result.append(m-1)
# Record the center index
center_index.append((i, j))
return(result, center_index)
# Test data
l = ['BGBBGB', 'GGGGGG', 'BGBBGB', 'GGGGGG', 'BGBBGB', 'BGBBGB']
# The pattern you are matching
pattern = 'G'
# Convert the n by m data into an array where each element is a character
data = np.array([np.array(list(x)) for x in l])
result, center_index = findPlusSigh(data, pattern)
for i, j in zip(result, center_index):
print ("Data center (Row {}, Column{}) has a plus sign length of {}".format(
j[0]+1, j[1]+1, i))
</code></pre>