使用键模式提取子字符串值

时间:2018-01-03 12:47:00

标签: python

可能是一个正则表达式问题(请原谅我破碎的英语)。

我需要识别以某个值开头的子字符串。

例如,请使用以下字符串:

  

“从user.table1内部联接user.table2中选择1 ...”

我需要提取所有以“user”开头并以“blank space”结尾的单词。因此,在将此“未知”正则表达式应用于上述字符串后,它将产生以下结果:

  

表1   表2

我尝试使用“re.findall”函数,但找不到指定开始和结束模式的方法。

那么,如何使用起始模式提取子字符串?

2 个答案:

答案 0 :(得分:1)

尝试积极的观察:

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+

答案 1 :(得分:0)

你可以这样试试:

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

这将返回:

['table1', 'table2']