You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用正则表达式与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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:00:56