如何从字符串中提取指定起始与结束文本之间的子串?
可行的提取方法分享
当然有办法实现这个需求啦!我给你整理了几种通用的思路,不管你用哪种编程语言,核心逻辑都是定位目标子串的起始和结束位置,然后截取中间内容。下面以Python和JavaScript为例,给你具体的实现代码:
方法一:正则表达式(推荐,灵活通用)
正则表达式非常适合这种匹配特定起止标记的场景,用非贪婪模式可以精准匹配从第一个"This"到最近的"abc"之间的内容:
Python 示例
import re original_str = "__GENUS : 2 __CLASS : Win32_Process __SUPERCLASS : __DYNASTY : __RELPATH : __PROPERTY_COUNT : 1 __DERIVATION : {} __SERVER : __NAMESPACE : __PATH : CommandLine : This is a Example Hello 789 123 abc PSComputerName : " # 用非贪婪匹配确保只取到第一个"abc"为止 match_result = re.search(r'This.*?abc', original_str) if match_result: target_str = match_result.group() print(target_str) # 输出:This is a Example Hello 789 123 abc else: print("未找到目标内容")
JavaScript 示例
const originalStr = "__GENUS : 2 __CLASS : Win32_Process __SUPERCLASS : __DYNASTY : __RELPATH : __PROPERTY_COUNT : 1 __DERIVATION : {} __SERVER : __NAMESPACE : __PATH : CommandLine : This is a Example Hello 789 123 abc PSComputerName : "; const match = originalStr.match(/This.*?abc/); const targetStr = match ? match[0] : "未找到目标内容"; console.log(targetStr);
方法二:字符串索引定位+切片
如果不想用正则,也可以通过查找标记的索引位置,直接切片截取:
Python 示例
original_str = "__GENUS : 2 __CLASS : Win32_Process __SUPERCLASS : __DYNASTY : __RELPATH : __PROPERTY_COUNT : 1 __DERIVATION : {} __SERVER : __NAMESPACE : __PATH : CommandLine : This is a Example Hello 789 123 abc PSComputerName : " start_pos = original_str.find("This") end_pos = original_str.find("abc") # 确保两个标记都找到再截取 if start_pos != -1 and end_pos != -1: # 加上"abc"的长度,确保包含最后一个字符 target_str = original_str[start_pos : end_pos + len("abc")] print(target_str) else: print("未找到目标内容")
JavaScript 示例
const originalStr = "__GENUS : 2 __CLASS : Win32_Process __SUPERCLASS : __DYNASTY : __RELPATH : __PROPERTY_COUNT : 1 __DERIVATION : {} __SERVER : __NAMESPACE : __PATH : CommandLine : This is a Example Hello 789 123 abc PSComputerName : "; const startIdx = originalStr.indexOf("This"); const endIdx = originalStr.indexOf("abc"); if (startIdx !== -1 && endIdx !== -1) { const targetStr = originalStr.slice(startIdx, endIdx + 3); // "abc"长度为3 console.log(targetStr); } else { console.log("未找到目标内容"); }
这两种方法都能满足你的需求,正则更适合复杂的匹配场景,索引切片则更直观易懂,你可以根据自己的习惯和实际场景选择~
内容的提问来源于stack exchange,提问作者yletz xyz
相关产品推荐
相关产品推荐

