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

如何使用Python与正则表达式从文本输入中提取指定文本及其对应数值——rent与transfer字段提取问题排查

正则提取rent/transfer金额的问题排查与解决

我来帮你搞定这个问题——你的正则没匹配到金额,核心问题是没考虑关键词和金额之间的空格,而且正则写法还有可以优化的地方。

问题根源分析

你写的正则(rent)+([0-9,.]*)有两个关键问题:

  1. rent和后面的金额之间有空格,但你的正则里完全没匹配这个空格,导致匹配到rent后,因为([0-9,.]*)允许匹配空字符串(*表示0次或多次),所以直接返回了rent就结束了。
  2. (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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 06:32:28