1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| #!/usr/bin/python
# -*- coding: utf-8 -*-
import re
digits = '0123456789'
#letters = 'abcdefghijklmnopqrstuvwxyz' + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
description = "(15, S, 25), (7, c, 4), (15, S, 25), (9, d, 3), (8, b, 4) "
patterns = ["13, S, 22", "8, b, 4"]
print "description=", description
print "patterns=", patterns
regexStringTemp = ""
regexString = ""
def generateRegexStringInt(val):
regexStringPart =""
if val <10:
threshold=1
else:
threshold = int(repr(val)[:-1]) +1 # delete unity: 16-> 1+1, 57-> 5+1, 234-> 23+1
for i in range(val-threshold, val+threshold+1):
regexStringPart = regexStringPart + str(i) +"|"
return regexStringPart[:-1]
def generateRegexStringLetter(val):
if val in 'TLSVN':
return val
else:
return chr(ord(val)-1) +"|"+ val +"|"+ chr(ord(val)+1)
for pattern in patterns:
values = pattern.split(", ")
if values[0][0] in digits:
part1 = generateRegexStringInt(int(values[0]))
else:
part1 = generateRegexStringLetter(values[0])
if values[1][0] in digits:
part2 = generateRegexStringInt(int(values[1]))
else:
part2 = generateRegexStringLetter(values[1])
if values[2][0] in digits:
part3 = generateRegexStringInt(int(values[2]))
else:
part3 = generateRegexStringLetter(values[2])
regexStringPart1 = "\((" + part1
regexStringPart1 = regexStringPart1 + "), ("
regexStringPart3 = "), (" + part3
regexStringPart3 = regexStringPart3 +")\)"
#regexStringPart2 = "), ("+ str(val2 -1) +"|"+ str(val2) +"|"+ str(val2 +1) +")\)"
regexString = regexString + regexStringPart1 + part2 + regexStringPart3 + ".*"
regexString = regexString[:-2] #remove the last ','
print "regexString="+regexString
listNear= []
regexPat = re.compile(regexString) #regexPat = re.compile("\(15, S, 25\),(?<=.*)\(15, b, 2\)")
listNear.extend(re.findall(regexPat, description)) #regexPat = re.compile(regexString)
print "listNear"+str(listNear)
for near in listNear:
lapin = "("+ str(list(near))[1:-1] +") "
print "lapin"+lapin
# lapin('15', 'S', '25', '8', 'b', '4')
# je voudrais les 2 solutions possibles: (15, S, 25), (7, c, 4) et (15, S, 25), (8, b, 4) ce dernier étant séparé par (9, d, 3) que je n'ai pas besoin de conserver.
teststr = []
for near in listNear:
tmp = "".join("[")
for n in range(0, len(near), 3):
tmp = tmp + "("+ near[n] +", "+ near[n+1] +", "+ near[n+2] +")"
tmp = tmp + "]"
teststr.append(tmp)
print "teststr=",teststr
# teststr= ['[(15, S, 25)(8, b, 4)]']
# Je voudrais de même ici trouvé les 2 solutions possibles. |
Partager