Python Regex, чтобы найти любое слово в строке, которая содержит запятую - PullRequest
2 голосов
/ 16 мая 2019

Я пытаюсь обработать некоторый код SQL, чтобы найти части оператора select, которые необходимо сгруппировать дальше в запросе.Например:

В строке "Select person, age, name, sum(count distinct arrests) from..."

я хотел бы получить "sum(count", потому что это единственная часть этой строки, которая имеет пробел с обеих сторон и содержит открытые скобки.

Я пробовал разные вещи, но борюсь.

Я попробовал re.compile (r '\ W. * [)]') И получаю слишком много назад иливообще ничего.

Ответы [ 3 ]

1 голос
/ 16 мая 2019

Использовать шаблон (\w+\(\w+)\s+

Ex:

import re

s = "Select person, age, name, sum(count distinct arrests) from..."
print(re.search(r"(\w+\(\w+)\s+", s).group(1))

Выход:

sum(count
0 голосов
/ 16 мая 2019

Как насчет не-регулярных выражений пути с split() и list-comprehension

some_list = "Select person, age, name, sum(count distinct arrests) from...".split(' ')
matching = [s for s in some_list if "(" in s][0]
print(matching) # sum(count


some_list = "COUNT(DISTINCT(case when etc...)".split(' ')
matching = [s for s in some_list if "(" in s][0]
print(matching) # COUNT(DISTINCT(case

РАБОЧИЙ ДЕМО: https://rextester.com/ZKJU83182

0 голосов
/ 16 мая 2019

Если совпадение также может происходить в начале строки, вы можете использовать обходные пути, чтобы утверждать, что слева и справа не является символом без пробела \S, и использовать повторяющуюся группу (?:...)+ для сопоставления.1+ раз.

(?<!\S)(?:\w+\(\w+)+(?!\S)

Regex demo

Это будет соответствовать COUNT(DISTINCT(case и sum(count

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