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

如何用Python提取含数值(含拼写数字)及前后各一个单词的文本

解决Python提取含数值的文本片段问题

嘿,我来帮你搞定这个提取包含数值的文本片段需求!要实现你想要的效果,关键是写一个精准的正则表达式,既能匹配阿拉伯数字(包括带千分位逗号的)和拼写形式的数字,又能捕获数值前后的第一个单词。

解决方案代码

import re

text = "I have 2 brothers and they bought one car each. My oldest brother invested 1,000 dollars."

# 定义正则表达式:匹配「前单词 + 数值(阿拉伯或拼写) + 后单词」的结构
pattern = r'(\w+) (\b(?:\d{1,3}(?:,\d{3})*|one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve)\b) (\w+)'

# 提取所有匹配的三元组,再拼接成目标字符串格式
matches = re.findall(pattern, text)
result = [f'{prev} {num} {next_word}' for prev, num, next_word in matches]

print(result)
# 输出:['have 2 brothers', 'bought one car', 'invested 1,000 dollars']

代码细节解释

  • 正则表达式拆分:
    • (\w+):捕获数值前面的第一个完整英文单词(匹配字母、数字、下划线,完全覆盖普通英文单词场景)
    • \b:单词边界标记,确保匹配的数字是独立的(比如不会把"one"误判成"someone"的一部分)
    • (?:\d{1,3}(?:,\d{3})*):匹配带千分位逗号的阿拉伯数字,支持2、1,000、123,456这类格式
    • |one|two|...|twelve:匹配拼写形式的数字,你可以根据需求扩展更多(比如thirteen、fourteen等)
    • 最后一个(\w+):捕获数值后面的第一个完整英文单词
  • re.findall会返回所有符合规则的三元组列表,再通过列表推导式把每组拼接成你需要的字符串格式。

场景扩展建议

如果要处理更复杂的文本场景,可以微调正则:

  • 若数值前后可能带有标点:可以把(\w+)改成(\w+|[^\w\s])?,后续再过滤空值即可
  • 若要支持更多拼写数字:可以先定义一个数字单词列表,动态生成正则片段,比如:
    number_words = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 
                    'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen']
    num_word_pattern = '|'.join(number_words)
    pattern = rf'(\w+) (\b(?:\d{1,3}(?:,\d{3})*|{num_word_pattern})\b) (\w+)'
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:32:41