新手求教:如何用Regex从指定字符串模式提取目标字段值?
提取指定键值对的正则表达式实现方法
核心思路
你的字符串都是键=值;分隔的结构,正则的核心逻辑是:匹配目标键名,然后捕获等号后到分号(或字符串结尾)的所有内容——用[^;]+匹配除分号外的任意字符,括号()用来标记需要提取的捕获组。
针对示例1的实现
示例1字符串:
Movie=HULK/Incredible HULK;old_actor=Edward Norton;new_actor=Mark Ruffalo
提取
old_actor的值,使用正则:old_actor=([^;]+)捕获组会返回
Edward Norton提取
new_actor的值,使用正则:new_actor=([^;]+)捕获组会返回
Mark Ruffalo
针对示例2的实现
示例2字符串:
Movie=HULK/Incredible HULK;old_movie_release_date=12 December 2008;new_movie_release_date=20 June 2012
提取
old_movie_release_date的值,使用正则:old_movie_release_date=([^;]+)捕获组会返回
12 December 2008提取
new_movie_release_date的值,使用正则:new_movie_release_date=([^;]+)捕获组会返回
20 June 2012
进阶:一次性提取多个键(命名捕获组)
如果想一次匹配多个目标键,可使用命名捕获组,方便直接通过组名获取结果,不用记捕获组顺序:
针对示例1的组合正则:
old_actor=(?P<old_actor>[^;]+);new_actor=(?P<new_actor>[^;]+)
针对示例2的组合正则:
old_movie_release_date=(?P<old_date>[^;]+);new_movie_release_date=(?P<new_date>[^;]+)
代码示例(Python)
import re # 处理示例1 str1 = "Movie=HULK/Incredible HULK;old_actor=Edward Norton;new_actor=Mark Ruffalo" match1_old = re.search(r'old_actor=([^;]+)', str1) match1_new = re.search(r'new_actor=([^;]+)', str1) print(match1_old.group(1)) # 输出 Edward Norton print(match1_new.group(1)) # 输出 Mark Ruffalo # 处理示例2 str2 = "Movie=HULK/Incredible HULK;old_movie_release_date=12 December 2008;new_movie_release_date=20 June 2012" match2_old = re.search(r'old_movie_release_date=([^;]+)', str2) match2_new = re.search(r'new_movie_release_date=([^;]+)', str2) print(match2_old.group(1)) # 输出 12 December 2008 print(match2_new.group(1)) # 输出 20 June 2012
内容的提问来源于stack exchange,提问作者RIP SunMicrosystem
相关产品推荐
相关产品推荐

