如何使用正则表达式匹配字符串中出现的前三个数字?
前三个分散数字匹配方案
你需要实现的是提取字符串中所有出现的数字字符,忽略数字之间的非数字分隔符后取前三位拼接,以下是可直接落地的实现方案:
方案1:先提取全量数字再截取(通用度最高)
该方案兼容所有编程语言,灵活度最高:
- 用
\d全局匹配提取字符串中所有数字字符,得到数字序列 - 取序列前三位拼接为字符串即可
匹配效果验证:
| 输入 | 提取的全量数字 | 输出结果 |
|---|---|---|
| DC-9-83(MD-83) | 9、8、3、8、3 | 983 |
| B-145LR | 1、4、5 | 145 |
| DC-9-31 | 9、3、1 | 931 |
| PA-28-180 | 2、8、1、8、0 | 281 |
| 737-600 | 7、3、7、6、0、0 | 737 |
若后续需求调整为取前N位数字,仅需修改截取长度即可,无需调整匹配规则。
方案2:单条正则直接捕获前三个数字
如果需要用单条正则一步完成捕获,可以使用如下规则:^\D*(\d)\D*(\d)\D*(\d)
规则说明:
^定位到字符串开头\D*跳过0个或多个非数字字符(\d)捕获单个数字到分组,共捕获三次即可拿到前三个出现的数字- 最终将捕获到的第1、2、3分组内容拼接,即为目标结果
代码示例(Python)
import re def get_first_three_digits(input_str: str) -> str: all_digits = re.findall(r'\d', input_str) return ''.join(all_digits[:3]) # 测试用例 test_cases = ["DC-9-83(MD-83)", "B-145LR", "DC-9-31", "PA-28-180", "737-600"] for case in test_cases: print(f"{case} 匹配结果:{get_first_three_digits(case)}")
运行输出完全符合预期匹配效果。
内容的提问来源于stack exchange,提问作者Jenny Char
相关产品推荐
相关产品推荐

