Python получает сгруппированные значения из позитивного взгляда вперед - PullRequest
0 голосов
/ 11 декабря 2018

для следующего регулярного выражения и ввода я могу получить соответствие группы (1) объекту. Но как получить совпадающие объекты из положительного взгляда вперед?

регулярное выражение и ввод

регулярное выражение: (\ w +) (? = \ S * () | (?: (? <=, | ()) \ S * (\ w +) \ s * (?: \ S *(\ w +) \ s *)? </p>

Ввод: ПЕРВИЧНЫЙ ИНДЕКС FIRST_ONE (PLATFORM_CD, SYSTEM_NAME, DB_NAME, TABLE_NAME, COLUMN_NAME);

в этом я могу получить имя индекса, 'FIRST_ONE'. Мне также нужно получить имена столбцов. Как это сделать?

Я пытался получить группу (2), но она не возвращает

код, который я пробовалis:

upiOrPiValue = re.search(r'(\w+)(?=\s*\()|(?:(?<=,|\())\s*(\w+)\s*(?:\s*(\w+)\s*)?',line)
                print('line : ',line)
                #print('---->',upiOrPiValue)
                if upiOrPiValue == None:
                    pass
                else:
                    PiorUpiName = upiOrPiValue.group(1)
                    print('PiorUpiName : ',PiorUpiName)
                    print('upiOrPiValue.group(2) : ',upiOrPiValue.group(2))

upiOrPiValue.group (1) возвращает значение 'FIRST_ONE'. Как получить имена столбцов?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

получил ответ для регулярного выражения: (\ w +) (? = \ S * () | (?: (? <=, | ()) \ S * (\ w +) \ s * (?: \ S* (\ w +) \ s *)? </p>

# -*- coding: utf-8 -*-

import re

regex = r"(\w+)(?=\s*\()|(?:(?<=,|\())\s*(\w+)\s*(?:\s*(\w+)\s*)?"
strVal = "PRIMARY INDEX FIRST_ONE ( PLATFORM_CD ,SYSTEM_NAME ,DB_NAME ,TABLE_NAME ,COLUMN_NAME );"

matches = re.finditer(regex, strVal)

for match in matches:
    for gCount in range(1, len(match.groups())+1):
        if match.group(gCount) != None:        
            print(match.group(gCount))
0 голосов
/ 11 декабря 2018

Ваш первый оператор как получить объекты совпадения из позитивного взгляда в будущее и более поздние операторы немного сбивают с толку.Предполагая, что вы хотите захватить индексное имя FIRST_ONE и оставшиеся имена столбцов, PLATFORM_CD ,SYSTEM_NAME ,DB_NAME ,TABLE_NAME ,COLUMN_NAME, вы можете упростить свое регулярное выражение и использовать его для захвата всего, что вам нужно.

(?:\w+)(?=\s*(?:\(|,|\)))

Python-код для того же самого,

import re
line = 'PRIMARY INDEX FIRST_ONE ( PLATFORM_CD ,SYSTEM_NAME ,DB_NAME ,TABLE_NAME ,COLUMN_NAME );'
arr = re.findall(r'(?:\w+)(?=\s*(?:\(|,|\)))', line)
print(arr)

Какие отпечатки,

['FIRST_ONE', 'PLATFORM_CD', 'SYSTEM_NAME', 'DB_NAME', 'TABLE_NAME', 'COLUMN_NAME']

Дайте мне знать, если это то, что вы искали.В противном случае, пожалуйста, обновите ваш пост, чтобы уточнить ваши потребности.

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