SQL Server子字符串提取:特定格式文本的目标内容提取需求
提取指定子串的解决方案
嘿,我来帮你搞定这个字符串提取需求!从你给出的例子来看,你需要从格式类似前缀.目标内容_后缀或者前缀.目标内容的字符串里,精准提取出中间的目标部分对吧?
核心思路
观察这些字符串的结构:
- 所有目标内容都在点号(
.)之后 - 目标内容的结束位置要么是第一个下划线(
_),要么是字符串的末尾
基于这个规律,我们可以用正则表达式来匹配符合要求的内容,效率很高。
正则表达式方案
使用这个正则表达式就能精准匹配:
(?<=\.)[A-Za-z]+(?=_|$)
拆解一下各个部分的作用:
(?<=\.):正向预查,确保匹配的内容前面紧跟一个点号,避免误匹配前缀里的内容[A-Za-z]+:匹配连续的字母(如果你的目标内容可能包含数字,可以改成[A-Za-z0-9]+)(?=_|$):正向预查,确保匹配的内容后面要么是下划线,要么是字符串结尾,刚好截断到目标内容的末尾
代码示例(Python)
import re # 测试的字符串列表 input_strings = ["YY_12.Yellow", "ABC_WSA.Thisone_A", "SS_4MON.DHHE_A_A"] # 定义正则模式 extract_pattern = r'(?<=\.)[A-Za-z]+(?=_|$)' # 遍历提取每个字符串的目标内容 for s in input_strings: result = re.search(extract_pattern, s) if result: print(result.group())
运行这段代码会输出:
Yellow Thisone DHHE
代码示例(JavaScript)
如果你用JavaScript处理,代码也很简单:
const inputStrings = ["YY_12.Yellow", "ABC_WSA.Thisone_A", "SS_4MON.DHHE_A_A"]; const extractPattern = /(?<=\.)[A-Za-z]+(?=_|$)/; inputStrings.forEach(str => { const match = str.match(extractPattern); if (match) { console.log(match[0]); } });
这个方案适配你给出的所有测试用例,而且如果后续有类似格式的字符串,只要结构符合就能正常提取~
内容的提问来源于stack exchange,提问作者Babulal
相关产品推荐
相关产品推荐

