如何用正则表达式提取特定格式字符串中的第三部分内容
正则提取特定字段解决方案
问题背景
原始数据格式如下(每行结构:路径字符串 + 数字ID + 目标字段 + 后续无关内容):
3/1/1/1 1461 IMIE_NAZWISKO -1 -1 {1 0 #1461*TRANSFORMATION GEOM*#1474 #1461*FUNCTION*DataText 3/1/2/1 1509 FUNKCJA -1 -1 {1 0 #1509*TRANSFORMATION GEOM*#1523 MATERIAL*#1522 #1509*FUNCTION*DataText 3/1/3/1 155045 WWW -1 -1 {1 0 #1550*TRANSFORMATION GEOM*#1563 3/2/1/1 1606 Noggi -1 0 {1 0 #1606*TRANSFORMATION GEOM*#1619 #1606*MASK_SOURCE 3/2/1/2/1 1636 FUNKCJA -1 0 {1 0 #1636*TRANSFORMATION GEOM*#1661 #1636*ANIMATION 3/2/1/2/2 16633 12_232A -1 0 {1 0 #1663*TRANSFORMATION GEOM*#1688 #1663*ANIMATION 3/2/2/1 1704 4040_ -1 0 {1 0 #1704*TRANSFORMATION GEOM*#1717
需求:提取每行的第三部分内容(如IMIE_NAZWISKO、FUNKCJA等),忽略前后无关数据,预期结果:
IMIE_NAZWISKO FUNKCJA WWW Noggi FUNKCJA 12_232A 4040_
之前的实现方案对前两部分的长度变化敏感,正则尝试未命中所有情况,需要更可靠的正则表达式方案。
解决方案
核心思路:匹配每行的前两个字段(路径、数字ID),然后捕获第三个字段(目标内容)。
正则表达式
使用以下正则可以精准匹配目标字段:
^\S+\s+\d+\s+(\S+)
^:匹配行开头\S+:匹配第一个字段(路径,不含空格)\s+:匹配字段间的空格\d+:匹配第二个字段(纯数字ID)\s+:匹配空格(\S+):捕获第三个字段(目标内容,不含空格)
Python代码实现
import re # 原始数据文本 raw_data = """3/1/1/1 1461 IMIE_NAZWISKO -1 -1 {1 0 #1461*TRANSFORMATION GEOM*#1474 #1461*FUNCTION*DataText 3/1/2/1 1509 FUNKCJA -1 -1 {1 0 #1509*TRANSFORMATION GEOM*#1523 MATERIAL*#1522 #1509*FUNCTION*DataText 3/1/3/1 155045 WWW -1 -1 {1 0 #1550*TRANSFORMATION GEOM*#1563 3/2/1/1 1606 Noggi -1 0 {1 0 #1606*TRANSFORMATION GEOM*#1619 #1606*MASK_SOURCE 3/2/1/2/1 1636 FUNKCJA -1 0 {1 0 #1636*TRANSFORMATION GEOM*#1661 #1636*ANIMATION 3/2/1/2/2 16633 12_232A -1 0 {1 0 #1663*TRANSFORMATION GEOM*#1688 #1663*ANIMATION 3/2/2/1 1704 4040_ -1 0 {1 0 #1704*TRANSFORMATION GEOM*#1717""" # 编译正则 pattern = re.compile(r'^\S+\s+\d+\s+(\S+)', re.MULTILINE) # 提取所有匹配项 matches = pattern.findall(raw_data) # 输出结果 for item in matches: print(item)
代码说明
re.MULTILINE:让^匹配每行的开头,而非整个文本的开头findall:直接返回所有捕获的目标字段列表- 该方案不依赖前两部分的长度,只要前两个字段分别是“非空格字符串”和“纯数字”,就能精准提取第三个字段
内容的提问来源于stack exchange,提问作者user21149846
相关产品推荐
相关产品推荐

