如何使用正则表达式与re.findall提取指定前缀关联的子字符串?
提取SQL中
user.后的表名解决方案 没问题!这种从字符串里提取特定前缀后内容的需求,用Python的正则表达式就能轻松搞定,我给你两种实用的写法:
方法一:使用正向肯定预查(Lookbehind Assertion)
这种写法会精准定位到user.之后的位置,直接提取后面的非空白内容:
import re sql_str = "Select 1 from user.table1 inner join user.table2..." table_names = re.findall(r'(?<=user\.)\S+', sql_str) print(table_names) # 输出: ['table1', 'table2']
正则说明:
(?<=user\.):正向肯定预查,确保当前位置的前面正好是user.(注意.在正则里是特殊字符,必须用\转义),而且这部分不会被包含到最终的匹配结果里。\S+:匹配一个或多个非空白字符,刚好对应到空格前的表名部分,完美覆盖你需要的提取范围。
方法二:使用捕获组
如果你更习惯用捕获组的方式,也可以这样写,findall会自动返回捕获组里的内容:
import re sql_str = "Select 1 from user.table1 inner join user.table2..." table_names = re.findall(r'user\.(\S+)', sql_str) print(table_names) # 输出同样是 ['table1', 'table2']
正则说明:
user\.:匹配user.字符串(同样转义.)。(\S+):用括号把要提取的内容包起来作为捕获组,findall会忽略整个匹配的user.table1,只返回捕获到的table1这类内容。
两种方法都能达到你的需求,选哪种看个人习惯就行~
内容的提问来源于stack exchange,提问作者ramon
相关产品推荐
相关产品推荐

