как сопоставить указанное c слово вне скобок и игнорировать слово в скобках? - PullRequest
0 голосов
/ 23 апреля 2020

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

select t2.f1 as rf1, (select t1.f1 from table1 t1  where t1.f1 = t2.f2) as rff, t2.f3 as rf3 FROM table2 t2

В приведенной выше строке есть два "from". Один в скобках, а другой вне скобок. Я хотел бы получить сопоставленный текст непосредственно перед вторым «from»:

select t2.f1 as rf1, (select t1.f1 from table1 t1  where t1.f1 = t2.f2) as rff, t2.f3 as rf3 

Мое тестирование python Регулярное выражение:

^\s*select\s+(?P<SELECTED>.+?)\s+from

, которое возвращает: SELECTED t2.f1 as rf1, (select t1.f1

Кто-нибудь знает, как изменить регулярное выражение, чтобы получить SELECTED t2.f1 as rf1, (select t1.f1 from table1 t1 where t1.f1 = t2.f2) as rff, t2.f3 as rf3

Большое спасибо за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 23 апреля 2020

вы можете использовать это

^\s*select\s+(?P<SELECTED>.+?)\s+(from).*?(?=FROM)

, вы можете попробовать здесь найти полное совпадение онлайн-регулярное выражение

, и если вы знаете, что вы всегда 2 выберите и из

вы можете использовать это

^\s*select.*(from).*?(?=FROM)

вы можете увидеть optiion 2

0 голосов
/ 24 апреля 2020

Вот мое решение в python3 .7:

 pat1     = "^\s*select\s+(?P<SELECTED>.*(from)*)\s+(?=from)"
 selected = re.compile(pat1, ((re.IGNORECASE | re.DOTALL) | re.MULTILINE))

 txt = "select t2.f1 as rf1, (select t1.f1 from table1 t1  where t1.f1 = t2.f2) as rff, t2.f3 as rf3 FROM table2 t2"
 selected.match(txt)

Спасибо за помощь @Beny Gj.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...