在Oracle中提取行字符串内的唯一trk-与track值
给定一批包含tracking=开头的URL字符串,需要从中提取出trk-xxx或trackxxx格式的唯一标识,示例输入如下:
tracking=http://test-trk-801v.pii-dmz.ext:8080/95078&analysis=http://test-trk-801v.pii-dmz.ext:8080/95078-analysis/index.jsp
tracking=http://localtest-mi-track16.localperc.cloud:11080/232819&analysis=http://localtest-mi-anlys19.localperc.cloud:9080/232819-analysis/index.jsp
tracking=http://test-trk-002.pii-dmz.ext:10088/77971
tracking=http://test-trk-003.pii-dmz.ext:14080/92542
tracking=http://localtest-mi-track04.localperc.cloud:15080/203396&dentalanalysis=http://localtest-mi-anlys12.localperc.cloud:8080/203396-analysis-dental/index.jsp&analysis=http://localtest-mi-anlys03.localperc.cloud:12080/203396-analysis/index.jsp
tracking=http://localtest-mi-track03.localperc.cloud:14080/202161&bonescananalysis=http://localtest-mi-anlys03.localperc.cloud:10088/202161-analysis-bonescan/index.jsp&analysis=http://localtest-mi-anlys03.localperc.cloud:10088/202161-analysis/index.jsp
tracking=http://test-trk-002.pii-dmz.ext:10088/7732
tracking=http://test-trk-003.pii-dmz.ext:14080/92902
tracking=http://localtest-mi-track16.localperc.cloud:11080/236978&analysis=http://localtest-mi-anlys19.localperc.cloud:9080/236978-analysis/index.jsp
方案一:Python脚本处理
适合批量处理大量数据,自动去重并分类输出:
import re unique_ids = set() # 读取包含所有URL行的文件(假设文件名为urls.txt) with open('urls.txt', 'r', encoding='utf-8') as file: for line in file: # 只处理tracking开头的部分,截断&之后的内容 tracking_segment = line.split('&')[0].strip() # 匹配trk-xxx或trackxxx格式的标识 match_result = re.search(r'(trk-[^.]+|track[^.]+)', tracking_segment) if match_result: unique_ids.add(match_result.group(1)) # 分类输出结果 trk_list = [id for id in unique_ids if id.startswith('trk-')] track_list = [id for id in unique_ids if id.startswith('track')] print("trk系列唯一标识:", ', '.join(trk_list)) print("track系列唯一标识:", ', '.join(track_list))
运行脚本后,输出结果为:
trk系列唯一标识: trk-801v, trk-002, trk-003 track系列唯一标识: track16, track04, track03
方案二:命令行工具组合
适合快速处理文本文件,无需编写脚本:
将所有URL行保存到urls.txt,执行以下命令:
# 提取并去重trk系列标识 grep -o 'trk-[^.]*' urls.txt | sort | uniq # 提取并去重track系列标识 grep -o 'track[^.]*' urls.txt | sort | uniq
执行后会分别输出:
trk-002 trk-003 trk-801v
track03 track04 track16
内容的提问来源于stack exchange,提问作者Jyoti Prakash Mallick

