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

需求:编写C#正则表达式提取指定字段对应值

字段值提取正则优化方案

需求说明

需要从文本中提取以下三个字段的值:

  • CustomerID
  • Amount
  • order id

三个待提取的示例文本如下:

示例文本1

CustomerID:    B377JWIWV10LEX
Amount: Rs.1500
order id : 604-1343456290402730
Reason:  Customer tried making a payment for 1500 via UPI

示例文本2

CustomerID :  B377JWIWV10LEX
AmOunt: 1500
order id : 604-1343456290402730 424
Reason:  Customer tried making a payment for 1500 via UPI

示例文本3

CustomerID # B377JWIWV10LEX
AmOunt: 1500
order id : 6041343456290402730424
Reason:  Customer tried making a payment for 1500 via UPI

原正则问题分析

你之前使用的正则逻辑混乱,导致提取不准确:

  • 硬编码Rs.相关前缀,干扰了CustomerID、order id这类无Rs前缀字段的匹配
  • 预查部分(No|#|id|:|-|\s)*匹配范围过宽,会捕获多余字符,导致值的起始位置错误
  • 末尾(.*)(?!\n)*属于冗余写法,.*在单行模式下已能匹配到行尾

优化后的正则方案

针对每个字段的特点,分别编写精准正则,支持大小写不敏感匹配、多种分隔符(:/#)、前后空格兼容:

1. CustomerID提取正则

(?i)^CustomerID\s*[:#]\s*(.*)$
  • (?i):忽略大小写
  • ^CustomerID:匹配行首的字段名
  • \s*[:#]\s*:匹配分隔符(:或#),前后允许任意空格
  • (.*)$:捕获分隔符后到行尾的所有内容(自动忽略开头空格)

2. Amount提取正则

如果需要保留Rs.前缀:

(?i)^Amount\s*[:#]\s*(.*)$

如果仅需提取数值:

(?i)^Amount\s*[:#]\s*(?:Rs\.?\s*)?(.*)$
  • (?:Rs\.?\s*)?:可选匹配Rs./Rs前缀,不捕获该部分
  • (.*):捕获后续的数值内容

3. order id提取正则

(?i)^order id\s*[:#]\s*(.*)$

逻辑同CustomerID,适配字段名的空格分隔写法

提取效果验证

用优化后的正则提取三个示例文本,结果如下:

  • 示例1
    • CustomerID: B377JWIWV10LEX
    • Amount: Rs.1500(或数值1500)
    • order id: 604-1343456290402730
  • 示例2
    • CustomerID: B377JWIWV10LEX
    • Amount: 1500
    • order id: 604-1343456290402730 424
  • 示例3
    • CustomerID: B377JWIWV10LEX
    • Amount: 1500
    • order id: 6041343456290402730424

批量提取代码示例(Python)

import re

# 定义字段与对应正则
field_patterns = {
    "CustomerID": r"(?i)^CustomerID\s*[:#]\s*(.*)$",
    "Amount": r"(?i)^Amount\s*[:#]\s*(.*)$",  # 保留Rs前缀的版本
    "order id": r"(?i)^order id\s*[:#]\s*(.*)$"
}

# 三个示例文本
samples = [
    """CustomerID:    B377JWIWV10LEX
Amount: Rs.1500
order id : 604-1343456290402730
Reason:  Customer tried making a payment for 1500 via UPI""",
    """CustomerID :  B377JWIWV10LEX
AmOunt: 1500
order id : 604-1343456290402730 424
Reason:  Customer tried making a payment for 1500 via UPI""",
    """CustomerID # B377JWIWV10LEX
AmOunt: 1500
order id : 6041343456290402730424
Reason:  Customer tried making a payment for 1500 via UPI"""
]

# 批量提取并输出
for i, sample in enumerate(samples, 1):
    print(f"=== 示例文本{i}提取结果 ===")
    lines = sample.splitlines()
    for field, pattern in field_patterns.items():
        for line in lines:
            match = re.match(pattern, line)
            if match:
                print(f"{field}: {match.group(1).strip()}")
                break
    print()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:54:23