Java正则处理含零与特殊字符的字符串问题求助
问题分析与正则解决方案
先明确所有需要处理的输入输出规则:
- 场景1:输入是一串前导零后跟%(如
0000%),输出0% - 场景2:输入以
%0000%开头,输出0% - 场景3:
- 输入以
%0109开头,提取数字部分返回109 - 输入为
%109,提取数字部分返回109
- 输入以
- 场景4:输入是前导零加有效数字加%(如
01234%),去掉前导零后输出1234% - 优先级:场景1的规则优先执行,不满足时再按其他规则处理
你之前用的^0+(?!$)只能处理部分场景(比如场景4),无法覆盖场景1、2、3的情况,需要按优先级设计多分支正则匹配:
分步正则替换方案
可以按优先级顺序执行以下替换:
处理场景1:匹配全前导零加%的情况
- 正则:
^0+%$ - 替换为:
0%
- 正则:
处理场景2:匹配以
%0000%开头的情况- 正则:
^%0000% - 替换为:
0%
- 正则:
处理场景3:提取
%后所有数字(忽略前导零)- 正则:
^%0*(\d+) - 替换为:
$1
- 正则:
处理场景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
相关产品推荐
相关产品推荐

