Python中从消息体提取特定值及字符清理问题
问题解决优化方案
核心问题分析
现有代码可通过正则提取目标内容,但字符清理逻辑不够精准,易残留冗余字符,同时缺乏异常处理机制——当正则匹配失败时会直接抛出错误,导致服务异常。
优化后的代码实现
import os from flask import Flask, request, Response from dotenv import load_dotenv from twilio.rest import Client import re load_dotenv() app = Flask(__name__) twilio_client = Client() @app.route('/incoming/sms', methods = ['POST']) def incoming_sms(): incoming_message = request.form.get("Body", "") # 提取目标数据,增加异常防护 phone_match = re.search(r'!(.*?):', incoming_message) whatsapp_to = phone_match.group(1).strip() if phone_match else "" message_match = re.search(r'%([^=]*?)=', incoming_message) extract_message = message_match.group(1).strip() if message_match else "" # 精准清理特殊字符并整理格式 body_message = re.sub(r'[+$@&%{}:=!]+', ' ', extract_message).strip() body_message = re.sub(r'\s+', ' ', body_message) twilio_from = os.getenv("TWILIO_FROM_NUMBER") # 仅当手机号和消息内容有效时发送 if whatsapp_to and body_message: message = f"TRAKSIFY事件已上报,事件内容:{body_message}" twilio_client.messages.create( body=message, from_=f"whatsapp:{twilio_from}", to=f"whatsapp:{whatsapp_to}" ) return Response() if __name__ == '__main__': app.run()
关键优化点说明
- 正则匹配精准化:
- 用非贪婪模式
.*?替代.*,避免匹配超出目标范围的内容 - 用
[^=]*?限定消息内容的匹配范围,确保仅提取%和=之间的字符 - 对匹配结果调用
strip()去除首尾空格
- 用非贪婪模式
- 异常安全防护:
- 使用
request.form.get("Body", "")避免键不存在时抛出错误 - 判断匹配对象是否存在后再提取内容,防止
AttributeError
- 使用
- 字符清理优化:
- 用
+匹配连续特殊符号,一次性替换为单个空格 - 增加连续空格合并逻辑,避免内容出现冗余空格
- 用
- 发送逻辑严谨性:
- 仅在手机号和消息内容都有效时触发发送,避免无效请求
内容的提问来源于stack exchange,提问作者Christian Listl
相关产品推荐
相关产品推荐

