如何使用Python与正则表达式从文本输入中提取指定文本及其对应数值——rent与transfer字段提取问题排查
正则提取rent/transfer金额的问题排查与解决
我来帮你搞定这个问题——你的正则没匹配到金额,核心问题是没考虑关键词和金额之间的空格,而且正则写法还有可以优化的地方。
问题根源分析
你写的正则(rent)+([0-9,.]*)有两个关键问题:
rent和后面的金额之间有空格,但你的正则里完全没匹配这个空格,导致匹配到rent后,因为([0-9,.]*)允许匹配空字符串(*表示0次或多次),所以直接返回了rent就结束了。(rent)+这种写法完全没必要,rent是固定单词,不需要重复匹配,写成rent就足够了。
修正后的代码实现
单独提取rent的代码
import re my_str = "19 Aug standing order rent Apolo Housing Assoc. 500.00 50.00 20 Aug transfer from John wick saving a/c 200.00 130.90" # 修正正则:匹配rent,然后匹配任意空白字符,再跳过中间内容匹配目标金额 find_rent = re.search(r"rent\s+.*?([0-9]+\.[0-9]+)", my_str) if find_rent: # 组合成你需要的格式 found = f"rent {find_rent.group(1)}" print(found) # 输出: rent 500.00
通用提取函数(同时支持rent和transfer)
可以把逻辑封装成通用函数,避免重复写正则:
import re def extract_transaction(text, keyword): # 通用正则:匹配关键词→空白字符→跳过中间内容→匹配标准金额 pattern = re.compile(rf"{keyword}\s+.*?([0-9]+\.[0-9]+)") match_result = pattern.search(text) if match_result: return f"{keyword} {match_result.group(1)}" return None my_str = "19 Aug standing order rent Apolo Housing Assoc. 500.00 50.00 20 Aug transfer from John wick saving a/c 200.00 130.90" # 调用示例 print(extract_transaction(my_str, "rent")) # 输出: rent 500.00 print(extract_transaction(my_str, "transfer")) # 输出: transfer 200.00
修正逻辑说明
\s+:匹配一个或多个空白字符(包括空格、制表符等),解决关键词和金额之间的分隔问题。.*?:非贪婪匹配任意字符,用来跳过关键词和目标金额之间的无关内容(比如Apolo Housing Assoc.或from John wick saving a/c)。[0-9]+\.[0-9]+:精确匹配带小数点的标准金额格式,避免误匹配到后面的其他数字(比如50.00或130.90)。
内容的提问来源于stack exchange,提问作者Hitman
相关产品推荐
相关产品推荐

