Найти - Пользователи
Полная версия: Сравнение строк по маске
Начало » Python для экспертов » Сравнение строк по маске
1
abogdan
Есть строка вида:
MLIST 0x1 0x2 0x3 0x4 0,00 HELLO HI 0xa 854,166666666667 (a4) 1005,20833333333 (c1)
Необходимо сравнить по маске:
MLIST 0x1 0x2 0x3 0x4 * HELLO HI 0xa * (*) * (*)
Кто знает как реализовать?
Гугл молчит..
fata1ex
Компилируете регулярку по маске и применяете её к строке. Если нашлось что-то, значит она подходит маске. По-моему, довольно логично.
abogdan
fata1ex
Компилируете регулярку по маске и применяете её к строке. Если нашлось что-то, значит она подходит маске. По-моему, довольно логично.
Да, несомненно! НО, в строке
MLIST 0x1 0x2 0x3 0x4 0,00 HELLO HI 0xa 854,166666666667 (a4) 1005,20833333333 (c1)
значения 854,166666666667 1005,20833333333 динамические, а заменить метасимволом не выход, т.к. эти значения могут быть равны и 1000 и 800 и 65 и т.п.
fata1ex
Вы хотите сказать, что маску строки нельзя задать регулярным выражением? Какая же это маска тогда?

abogdan
эти значения могут быть равны и 1000 и 800 и 65
'\d+'
py.user.next
>>> import re
>>> 
>>> s = 'MLIST 0x1 0x2 0x3 0x4 0,00 HELLO HI 0xa 854,166666666667 (a4) 1005,20833333333 (c1)'
>>> 
>>> numpat = r'\d+(,\d+)?'
>>> idpat = r'[a-z][0-9]'
>>> 
>>> # MLIST 0x1 0x2 0x3 0x4 * HELLO HI 0xa * (*) * (*)
... pat = 'MLIST 0x1 0x2 0x3 0x4 {num} HELLO HI 0xa {num} ' \
...       '\({iden}\) {num} \({iden}\)$'.format(num=numpat, iden=idpat)
>>> 
>>> m = re.match(pat, s)
>>> if m:
...     print(m.group(0))
... 
MLIST 0x1 0x2 0x3 0x4 0,00 HELLO HI 0xa 854,166666666667 (a4) 1005,20833333333 (c1)
>>>

ещё короче
>>> import re
>>> 
>>> s = 'MLIST 0x1 0x2 0x3 0x4 0,00 HELLO HI 0xa 854,166666666667 (a4) 1005,20833333333 (c1)'
>>> 
>>> # MLIST 0x1 0x2 0x3 0x4 * HELLO HI 0xa * (*) * (*)
... pat = 'MLIST 0x1 0x2 0x3 0x4 {0} HELLO HI 0xa {0} ' \
...       '\({1}\) {0} \({1}\)$'.format(r'\d+(,\d+)?', r'[a-z][0-9]')
>>> 
>>> m = re.match(pat, s)
>>> if m:
...     print(m.group(0))
... 
MLIST 0x1 0x2 0x3 0x4 0,00 HELLO HI 0xa 854,166666666667 (a4) 1005,20833333333 (c1)
>>> 

и яснее
>>> s = 'MLIST 0x1 0x2 0x3 0x4 0,00 HELLO HI 0xa 854,166666666667 (a4) 1005,20833333333 (c1)'
>>> 
>>> # MLIST 0x1 0x2 0x3 0x4 * HELLO HI 0xa * (*) * (*)
... pat = 'MLIST 0x1 0x2 0x3 0x4 {num} HELLO HI 0xa {num} ' \
...       '\({iden}\) {num} \({iden}\)$'.format(
...           num=r'\d+(,\d+)?', iden=r'[a-z][0-9]'
...       )
>>> 
>>> m = re.match(pat, s)
>>> if m:
...     print(m.group(0))
... 
MLIST 0x1 0x2 0x3 0x4 0,00 HELLO HI 0xa 854,166666666667 (a4) 1005,20833333333 (c1)
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB