Соответствие последовательности шаблонов - PullRequest
0 голосов
/ 08 октября 2018

У меня есть последовательность шаблонов, и я хочу сопоставить строки с этими шаблонами и вернуть первую группу.Я работаю в Scala, но мне нужно было сделать то же самое в Python.Есть ли способ сопоставить и сопоставить коллекцию шаблонов?

Вот как это будет выглядеть в scala

 private val patterns = Stream(

Pattern.compile("([a-zA-Z\\d]{9}-[a-zA-Z\\d]{3})"),
Pattern.compile("([a-zA-Z\\d]{3}-[a-zA-Z\\d]{3}-\\d{4}-\\d{2})"),
Pattern.compile("([a-zA-Z\\d]{5}-[a-zA-Z\\d]{3}-\\d{4})"),
Pattern.compile("([a-zA-Z\\d]{5}-[a-zA-Z\\d]{3}-\\d{4})"),
Pattern.compile("([a-zA-Z\\d]{3}-[a-zA-Z\\d]{3}-\\d{4}-\\d{2})"),
Pattern.compile("([a-zA-Z\\d]{5}-[a-zA-Z\\d]{3}-\\d{4})"),
Pattern.compile("([a-zA-Z\\d!]{2,3}-[a-zA-Z\\d]{2,4}-[a-zA-Z\\d]{3,5}-[\\d]{1,2})"),
Pattern.compile("([a-zA-Z\\d]{3,6}-[a-zA-Z\\d]{3}-[\\d]{1,6})"),
Pattern.compile("([a-zA-Z\\d]{3,6}-[a-zA-Z\\d]{4}-[\\d]{1,6})")
)
patterns.map(_.matcher(sku)).find(_.matches()).map(_.group(1)

1 Ответ

0 голосов
/ 08 октября 2018

Эта относительно точная транслитерация работает для меня:

import re
patterns = [
    re.compile("([a-zA-Z\\d]{9}-[a-zA-Z\\d]{3})"),
    re.compile("([a-zA-Z\\d]{3}-[a-zA-Z\\d]{3}-\\d{4}-\\d{2})"),
    re.compile("([a-zA-Z\\d]{5}-[a-zA-Z\\d]{3}-\\d{4})"),
    re.compile("([a-zA-Z\\d]{5}-[a-zA-Z\\d]{3}-\\d{4})"),
    re.compile("([a-zA-Z\\d]{3}-[a-zA-Z\\d]{3}-\\d{4}-\\d{2})"),
    re.compile("([a-zA-Z\\d]{5}-[a-zA-Z\\d]{3}-\\d{4})"),
    re.compile("([a-zA-Z\\d!]{2,3}-[a-zA-Z\\d]{2,4}-[a-zA-Z\\d]{3,5}-[\\d]{1,2})"),
    re.compile("([a-zA-Z\\d]{3,6}-[a-zA-Z\\d]{3}-[\\d]{1,6})"),
    re.compile("([a-zA-Z\\d]{3,6}-[a-zA-Z\\d]{4}-[\\d]{1,6})")

]

sku = "123456789-AAA"

res = filter(lambda x: x is not None, map(lambda x: x.match(sku), patterns))

print res[0].group(1)

Скорее всего, вы могли бы использовать более глубокое понимание списков Pythonic, но приведенный выше подход очень сильно отражает ваш код.

Он имеетодин недостаток - он не останавливается на первом совпадении, но оценивает все совпадения перед возвратом первого.

...