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

Java正则处理含零与特殊字符的字符串问题求助

问题分析与正则解决方案

先明确所有需要处理的输入输出规则:

  • 场景1:输入是一串前导零后跟%(如0000%),输出0%
  • 场景2:输入以%0000%开头,输出0%
  • 场景3:
    • 输入以%0109开头,提取数字部分返回109
    • 输入为%109,提取数字部分返回109
  • 场景4:输入是前导零加有效数字加%(如01234%),去掉前导零后输出1234%
  • 优先级:场景1的规则优先执行,不满足时再按其他规则处理

你之前用的^0+(?!$)只能处理部分场景(比如场景4),无法覆盖场景1、2、3的情况,需要按优先级设计多分支正则匹配:

分步正则替换方案

可以按优先级顺序执行以下替换:

  1. 处理场景1:匹配全前导零加%的情况

    • 正则:^0+%$
    • 替换为:0%
  2. 处理场景2:匹配以%0000%开头的情况

    • 正则:^%0000%
    • 替换为:0%
  3. 处理场景3:提取%后所有数字(忽略前导零)

    • 正则:^%0*(\d+)
    • 替换为:$1
  4. 处理场景4:去掉数字部分的前导零保留%

    • 正则:^0+(\d+%)
    • 替换为:$1

示例代码(Python)

import re

def process_input(s):
    # 场景1优先级最高
    s = re.sub(r'^0+%$', '0%', s)
    # 场景2
    s = re.sub(r'^%0000%', '0%', s)
    # 场景3
    s = re.sub(r'^%0*(\d+)', r'\1', s)
    # 场景4
    s = re.sub(r'^0+(\d+%)', r'\1', s)
    return s

# 测试各场景
print(process_input('0000%'))      # 输出: 0%
print(process_input('%0000%'))     # 输出: 0%
print(process_input('%0109'))      # 输出: 109
print(process_input('%109'))       # 输出: 109
print(process_input('01234%'))     # 输出: 1234%

合并正则(可选)

如果希望用单个正则完成(按优先级匹配),可以利用正则分支的顺序特性(左边分支优先匹配):

import re

def process_input(s):
    return re.sub(
        r'^0+%$|^%0000%|^%0*(\d+)|^0+(\d+%)',
        lambda m: '0%' if m.group(0) in ['0000%', '%0000%'] else m.group(1) or m.group(2),
        s
    )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:54:50