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

WSO2字符串拆分求助:提取数字与非数字部分结果异常

WSO2 API 字符串拆分:分离数字与含空格非数字内容的解决方案

问题概述

在WSO2中搭建的字符串拆分API,目标是分离输入字符串中的数字与非数字部分,但当前实现存在两个问题:

  • 数字结果带有多余换行和空格
  • 非数字部分丢失空格(例如Mario Naga变成MarioNaga)

问题原因

  1. 数字部分多余空白:原代码直接提取<Value>节点内容,节点内的缩进换行被保留,未做空白处理
  2. 非数字丢失空格:原translate函数仅保留大小写字母,未包含空格字符,导致空格被过滤

解决方案1:改进translate函数实现

通过调整空白处理和保留字符范围,修复两个问题:

<?xml version="1.0" encoding="UTF-8"?>
<api context="/split1" name="SplitAlphaNumber" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="POST">
        <inSequence>
            <!-- 用normalize-space()处理输入值,去除首尾空白并合并中间冗余空白 -->
            <property expression="normalize-space(//OperationValueRegex/Value)" name="Value" scope="default" type="STRING"/>
            <payloadFactory media-type="xml">
                <format>
                    <OperationValueRegex xmlns="">
                        <Result1>$1</Result1>
                        <Result2>$2</Result2>
                    </OperationValueRegex>
                </format>
                <args>
                    <!-- 提取纯数字:移除所有非数字字符 -->
                    <arg evaluator="xml" expression="translate($ctx:Value, translate($ctx:Value,'0123456789',''), '')"/>
                    <!-- 提取非数字(含空格):移除所有数字,保留字母和空格 -->
                    <arg evaluator="xml" expression="translate($ctx:Value, translate($ctx:Value,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ',''), '')"/>
                </args>
            </payloadFactory>
            <respond/>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </resource>
</api>

修改点说明

  • 在提取Value时添加normalize-space(),处理输入中的换行、缩进等冗余空白
  • 第二个translate的保留字符末尾添加空格' ',确保非数字部分的空格被保留

解决方案2:使用正则表达式(更简洁)

WSO2支持XPath 2.0正则函数,用replace()可以更直观地实现拆分:

<?xml version="1.0" encoding="UTF-8"?>
<api context="/split1" name="SplitAlphaNumber" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="POST">
        <inSequence>
            <property expression="normalize-space(//OperationValueRegex/Value)" name="Value" scope="default" type="STRING"/>
            <payloadFactory media-type="xml">
                <format>
                    <OperationValueRegex xmlns="">
                        <Result1>$1</Result1>
                        <Result2>$2</Result2>
                    </OperationValueRegex>
                </format>
                <args>
                    <!-- 替换所有非数字字符为空,得到纯数字 -->
                    <arg evaluator="xml" expression="replace($ctx:Value, '[^0-9]', '')"/>
                    <!-- 替换所有数字字符为空,保留字母和空格 -->
                    <arg evaluator="xml" expression="replace($ctx:Value, '[0-9]', '')"/>
                </args>
            </payloadFactory>
            <respond/>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </resource>
</api>

正则说明

  • replace($ctx:Value, '[^0-9]', ''):匹配所有非数字字符并替换为空,提取纯数字
  • replace($ctx:Value, '[0-9]', ''):匹配所有数字字符并替换为空,保留非数字内容(含空格)

测试结果

输入:

<OperationValueRegex>
        <Value>Mario Naga 1234</Value>
</OperationValueRegex>

输出(符合预期):

<OperationValueRegex>
    <Result1>1234</Result1>
    <Result2>Mario Naga</Result2>
</OperationValueRegex>

内容的提问来源于stack exchange,提问作者Hitoshi Mario Naga Mait

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:45:44