String pattern matching
forward at seznam.cz
forward at seznam.cz
Sat Apr 1 09:07:52 EST 2006
Firstly sort variable expressions by its length
xy = 'abca'
xyz = 'abcaaab'
vxw = 'eeabcac'
Expand all expressions by its values except itself
xy = 'abca'
'abca' z = 'abcaaab'
vxw = 'eeabcac'
Cut all left and right matches
xy = 'abca'
z = 'aab'
vxw = 'eeabcac'
Repeat until you can.
z = 'aab'
xy = 'abca'
vxw = 'eeabcac'
Get first variable expression intersection
- variables: x is longest intersection of xy and vxw
- value : 'abca' starting at position 2 of vxw (longest intersection
of 'abca' and 'eeabcac')
'a' starting at position 5 of vxw
Then try matching:
x='abca' (at position 2 of vxw)
x='abc' (at position 2 of vxw)
x='ab' (at position 2 of vxw)
x='a' (at position 2 of vxw)
x='a' (at position 5 of vxw)
x='' (at position arbitrary position of vxw)
and calculate the others.
Repeat all step until you can.
In your example, there are 13 results.
x='abca' y='' z='aab' v='ee' w='c'
x='abc' y='a' z='aab' v='ee' w='ac'
x='ab' y='ca' z='aab' v='ee' w='cac'
x='a' y='bca' z='aab' v='ee' w='bcac'
x='a' y='bca' z='aab' v='eeabc' w='c'
x='' y='abca' z='aab' v='' w=''
x='' y='abca' z='aab' v='e' w='eabcac'
x='' y='abca' z='aab' v='ee' w='abcac'
x='' y='abca' z='aab' v='eea' w='bcac'
x='' y='abca' z='aab' v='eeab' w='cac'
x='' y='abca' z='aab' v='eeabc' w='ac'
x='' y='abca' z='aab' v='eeabca' w='c'
x='' y='abca' z='aab' v='eeabcac' w=''
with the same original expressions
xy = 'abca'
xyz = 'abcaaab'
vxw = 'eeabcac'
Note that maximum matching is best matching in some kind of problems.
Cutting off empty values, you can get 4 results:
x='abc' y='a' z='aab' v='ee' w='ac'
x='ab' y='ca' z='aab' v='ee' w='cac'
x='a' y='bca' z='aab' v='ee' w='bcac'
x='a' y='bca' z='aab' v='eeabc' w='c'
More information about the Python-list
mailing list