You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中使用正则表达式匹配整个目标字符串?

解决方案

原代码存在两个核心问题:

  • 循环中每次用crime = re.findall(...)覆盖变量,最终只保留最后一次匹配结果,无法收集所有目标条目
  • 正则[A-Z].*过于宽泛,会匹配所有以大写字母开头的字符串(比如"Pacific"、"IC"),不符合需求

针对你要匹配的两类目标字符串,我们可以编写更精准的正则,并调整收集结果的逻辑:

目标字符串特征与对应正则

  • 犯罪类型:全大写,包含空格、连字符、括号、数字、$符号,例如"THEFT FROM MOTOR VEHICLE - GRAND ($950.01 AND OVER)"
    正则:^[A-Z\s\-()$0-9.]+$(确保整个字符串都是允许的字符,且无小写字母)
  • 地点字符串:以数字开头,后续是大写字母和空格(允许多个连续空格),例如"5600 N FIGUEROA ST"
    正则:^\d+\s+[A-Z\s]+$

修正后的代码

import re

hello = {"meta": 1, "reza": [[ "row-f696.af3d.c3v9", "00000000-0000-0000-2D2F-EA38F9F11DB9", 0, 1642111191, 1642111191, "{ }", "201412343", "2020-06-15T00:00:00", "2020-06-15T00:00:00", "0700", "14", "Pacific", "1494", "1", "331", "THEFT FROM MOTOR VEHICLE - GRAND ($950.01 AND OVER)", "1606 0344 1300 1402", "60", "F", "W", "212", "TRANSPORTATION FACILITY (AIRPORT)", "IC", "Invest Cont", "331", "998", "400    WORLD                        WY", "33.9433", "-118.4072" ] ,
        [ "row-f2wh.yte2-zhv8", "00000000-0000-0000-0BF4-2A6281C66DEF", 0, 1636553859, 1636553859, "{ }", "201107194", "2020-03-11T00:00:00", "2020-03-11T00:00:00", "1100", "11", "Northeast", "1118", "1", "510", "VEHICLE - STOLEN", "0", "108", "PARKING LOT", "IC", "Invest Cont", "510", "5600 N  FIGUEROA                     ST", "34.114", "-118.1949" ]]}

crime = []
# 预编译正则,提升效率
crime_pattern = re.compile(r'^[A-Z\s\-()$0-9.]+$')
location_pattern = re.compile(r'^\d+\s+[A-Z\s]+$')

for items in hello["reza"]:
    for item in items:
        # 先确保item是字符串类型
        if isinstance(item, str):
            # 匹配犯罪类型,排除过短的无效匹配(比如"IC"、"F")
            if crime_pattern.match(item) and len(item) > 3:
                crime.append(item)
            # 匹配地点
            elif location_pattern.match(item):
                crime.append(item)

print(crime)

代码说明

  1. 预编译正则:提前编译正则表达式,避免循环中重复编译,提升性能
  2. 类型判断:先判断item是否为字符串,避免对数字等非字符串类型进行匹配
  3. 过滤短字符串:针对犯罪类型,排除长度过短的匹配(比如"IC"、"F"),确保只保留有效条目
  4. 结果收集:用append将符合条件的条目添加到列表,而不是覆盖变量

运行后输出的结果会包含所有你需要的目标字符串:

['THEFT FROM MOTOR VEHICLE - GRAND ($950.01 AND OVER)', 'TRANSPORTATION FACILITY (AIRPORT)', '400    WORLD                        WY', 'VEHICLE - STOLEN', '5600 N  FIGUEROA                     ST']

内容的提问来源于stack exchange,提问作者AshRoss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 00:24:52