LINUX.ORG.RU

Conditional lookahead regex in python

 ,


0

1

Допустим есть такая регулярка на PHP:

^\+61(?(?=1800)1800\d{6}|\d{9})$

на странице видно, что из 4-х номеров она матчит только первые 2

+611800123456  # match
+61123456789   # match

+61180012345
+6112345678

В python такой синтаксис не поддерживается, указано, что группа должна быть именованная, чтобы на неё сослаться, т.е. как-то так, как я понимаю:

^\+61(?P<test>1800)?(?(test)\d{6}|\d{9})$

но проблема в том, что в этом варианте матчится и третий номер, хотя не должен.

Собственно вопрос, как исправить?

с питоном практически не знаком, но знаю про такую штуку

In [1]: import regex
   ...: regex.compile(r'^\+61(?(?=1800)1800\d{6}|\d{9})$')
Out[1]: regex.Regex('^\\+61(?(?=1800)1800\\d{6}|\\d{9})$', flags=regex.V0)
xgatron
()
Ответ на: комментарий от xgatron

Я думаю, что простой или проще и надёжнее, спасибо!

conformist ★★★
() автор топика

все верно, матчит первые 2. как написал, так и получил. 3 и 4 по колву символов не подходит.

https://regex101.com/ держи, проверяй тут.

regex в пистоне - норм! рекомендую.

anonymous
()

(?:) non-capturing group

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.