如何在Python中提取特定格式字符串的最后一个单词(含正则方案)
我来帮你解决这个问题~首先看看你原来的代码哪里出了问题,然后再给你两种可行的方案,包括正则表达式的简便方法:
先分析原代码的问题
你用str.strip("(|)")这里踩了个小坑:strip()方法不支持正则表达式,它只会把括号里的每个字符((、|、))当成单独的去除目标,而你的字符串开头是U,所以这一步根本没起到提取括号内内容的作用;再加上结尾的空格和)没被处理干净,导致后续split('.')后最后一个元素带着多余的符号,自然得不到正确结果。
方案一:修正原有字符串处理逻辑
不用正则,调整步骤就能搞定:
str = 'UPPER("Sales"."PRODUCTS"."PRODUCT_NAME" )' # 第一步:精准提取括号内的核心内容(去掉开头的UPPER(和末尾的)) content = str[str.find('(')+1 : str.rfind(')')].strip() # 第二步:按.分割成各个部分 parts = content.split('.') # 第三步:取最后一部分,去掉首尾的" val_final = parts[-1].strip('"') print(val_final) # 输出 PRODUCT_NAME
思路是先把多余的函数名、括号和空格去掉,再分割处理,彻底避开干扰项。
方案二:用正则表达式快速提取
正则可以一步到位,直接匹配最后一个被"包裹的目标,非常简便:
import re str = 'UPPER("Sales"."PRODUCTS"."PRODUCT_NAME" )' # 匹配所有被"包裹的单词,直接取最后一个 matches = re.findall(r'"(\w+)"', str) if matches: val_final = matches[-1] print(val_final) # 输出 PRODUCT_NAME
如果要更精准(比如担心引号内有特殊字符),可以用这个写法:
match = re.search(r'"([^&]+)"\s*\)', str) if match: val_final = match.group(1) print(val_final)
这里的正则逻辑是:用"匹配引号转义符,([^&]+)捕获引号内的内容(直到下一个&为止),\s*\)匹配结尾的空格和右括号,确保只抓取最后一个目标。
内容的提问来源于stack exchange,提问作者kavya8
相关产品推荐
相关产品推荐

