MVEL从字符串中提取字符串

XSL菜鸟

我有字符串“ 000134567-AA-2001”和“ 002134567-AB-2001”,我想提取“--AA”之前的所有数字。但是我只想返回从第一个非零数字开始的数字。例如,我想要“ 134567”或“ 2134567”。

是否有一些功能可以让我使用MVEL做到这一点?任何帮助表示赞赏。

安库·辛格(Ankur Singhal)

我不认为我们可以直接使用MVEL,但是可以的一点调整可能对我们有所帮助。

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import org.mvel2.MVEL;
import org.mvel2.ParserContext;
import org.mvel2.integration.VariableResolverFactory;
import org.mvel2.integration.impl.MapVariableResolverFactory;

public class MyTest {
    public static void main(String[] args) {
        String myString = "000134567 - AA - 2001";

        Map contextMap = new HashMap();
        contextMap.put("myString", myString);

        ParserContext ctx = new ParserContext();
        ctx.addPackageImport("java.util.regex");

        Serializable s = MVEL.compileExpression("outputString(myString)", ctx);

        System.out.println(MVEL.executeExpression(s, contextMap, getMvelFactory(contextMap)));
    }

    private static VariableResolverFactory getMvelFactory(Map contextMap) {
        VariableResolverFactory functionFactory = new MapVariableResolverFactory(contextMap);
        MVEL.eval(
                "outputString = def (myString) { java.util.regex.Pattern p = java.util.regex.Pattern.compile(\"[0-9]+\"); java.util.regex.Matcher m = p.matcher(myString); if (m.find()) { String output = m.group(); return output.replaceAll(\"^0+\", \"\");}};",
                functionFactory);
        return functionFactory;
    }
}

功能

以下是我用Java编写的函数,我将其包含在其中Mvel VariableResolverFactory

outputString = def (myString) { 
        java.util.regex.Pattern p = java.util.regex.Pattern.compile("[0-9]+");
        Matcher m = p.matcher(myString);
        if (m.find()) {
            String output = m.group();
            return output.replaceAll("^0+", "");
        }
 };

创建解析器上下文并添加导入

由于java.util.regex软件包不适用于MVEL,因此我们将显式导入此软件包。

    ParserContext ctx = new ParserContext();
    ctx.addPackageImport("java.util.regex");

使用上面的Import编译表达式

这将仅编译表达式,并将添加导入以供评估时使用。

Serializable s = MVEL.compileExpression("outputString(myString)", ctx);

可变变量

您可以按以下方式传递变量,

    Map contextMap = new HashMap();
    contextMap.put("myString", myString);

其余的您可以根据需要更改函数主体,签名和return语句。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从字符串中提取字符

来自分类Dev

如何从字符串中提取字符串

来自分类Dev

从字符串响应中提取字符串

来自分类Dev

Java 从字符串中提取字符串

来自分类Dev

在PHP中提取字符串

来自分类Dev

从字符串中提取字典

来自分类Dev

从路径中提取字符串

来自分类Dev

从变量中提取字符串

来自分类Dev

从数组中提取字符串

来自分类Dev

从字符串中提取字段

来自分类Dev

在Javascript中提取字符串中的字符数组

来自分类Dev

PowerShell从字符串中提取字符

来自分类Dev

从Java中的字符串中提取字符

来自分类Dev

如何从字符串中提取字符?

来自分类Dev

PowerShell从字符串中提取字符

来自分类Dev

从“ td”标签中的字符串中提取字符

来自分类Dev

在 Excel 中提取字符串 Beetwen 2 字符

来自分类Dev

从字符串中提取字符并制作列表

来自分类Dev

从范围介于特殊字符之间的字符串中提取字符串

来自分类Dev

php从字符串中提取字符前后的子字符串

来自分类Dev

如何从字符串中提取字典形式?

来自分类Dev

从R中的字符串中提取字母

来自分类Dev

使用Perl从xml文件中提取字符串

来自分类Dev

从Java中的Json字符串中提取字段

来自分类Dev

从字符串中提取字典键值

来自分类Dev

如何从日志文件中提取字符串(日期)

来自分类Dev

如何在R中提取字符串

来自分类Dev

PostgreSQL:自动从文本中提取字符串

来自分类Dev

从用户输入URL Angular中提取字符串