0

次のような2つの文字列があります。

a = '54515923333558964'
b = '48596478923333558964'

現在、最長の後置一致は

c = '923333558964'

reを使用したソリューションは何ですか?

プレフィックスマッチで見つけた解決策は次のとおりです。

import re
pattern = re.compile("(?P<mt>\S*)\S*\s+(?P=mt)")
a = '923333221486456'
b = '923333221486234567'
c = pattern.match(a + ' ' + b).group('mt')
4

2 に答える 2

6

試してみてくださいdifflib.SequenceMatcher

import difflib
a = '54515923333558964'
b = '48596478923333558964'

s = difflib.SequenceMatcher(None, a, b)
m = s.find_longest_match(0, len(a), 0, len(b))
print a[m.a:m.a+m.size]
于 2012-09-26T09:54:22.637 に答える
1

正規表現パターンのこのバリエーションを使用できます。

\S*?(?P<mt>\S*)\s+\S*(?P=mt)$

編集。ただし、一部の入力ではO( n 3 )時間が必要になる場合があることに注意してください。たとえば試してみてください

a = 1000 * 'a'
b = 1000 * 'a' + 'b'

これは私のシステムで処理するのに1秒かかります。

于 2012-09-26T10:37:26.720 に答える