Вероятно, вопрос с регулярным выражением (простите за мой сломанный английский).

Мне нужно определить подстроку, которая начинается с определенного значения.

Например, возьмите такую строку:

"Выберите 1 из user.table1 внутреннего соединения user.table2 ..."

Мне нужно извлечь все слова, которые начинаются с «пользователь» и заканчиваются «пробелом». Таким образом, после применения этого "неизвестного" регулярного выражения к указанной выше строке будет получен следующий результат:

таблица1 таблица2

Я попытался использовать функцию «re.findall», но не смог найти способ указать шаблоны начала и конца.

Итак, как извлечь подстроки с помощью начального шаблона?

0
ramon 3 Янв 2018 в 15:46

2 ответа

Лучший ответ

Попробуйте позитивный просмотр назад:

import re
pattern=r'(?<=user\.)(\w+)?\s'
string_1="Select 1 from user.table1 inner join user.table2 ..."

match=re.findall(pattern,string_1)
print(match)

Выход:

['table1', 'table2']

Информация о регулярном выражении:

(?<=user\.)(\w+)?\s

`Positive Lookbehind` `(?<=user\.)`
Assert that the Regex below matches
user matches the characters user literally (case sensitive)
\. matches the character . literally (case sensitive)
1st Capturing Group (\w+)?
? Quantifier — Matches between zero and one times, as many times as possible, giving back as needed (greedy)
\w+ matches any word character (equal to [a-zA-Z0-9_])

Если этот шаблон не работает, попробуйте следующее: (?<=user\.)\w+

2
user9158931user9158931 4 Янв 2018 в 02:35

Вы можете попробовать это так:

re.findall(r'\buser\.(..*?)\b',
           "Select 1 from user.table1 inner join user.table2...")

Это вернет:

['table1', 'table2']
0
Alfe 3 Янв 2018 в 13:03