3

我想选择并替换三个字符,比如“STR”,除非它们在 @ 符号之后。

我使用带有替换方法的文本缓冲区类。我可以替换这三个字符,但它也替换了三个字符之前的字符。

这是我的代码:

static void simpleReplace(Args _args)
{
    TextBuffer txtb = new TextBuffer();         

    txtb.setText(" STR @STR #STR");
    txtb.regularExpressions(true);

    txtb.replace("[^@]STR", "FOO");
    info(txtb.getText());        
}

结果是“FOO @STR FOO”。

我想要的结果是“ FOO @STR #FOO”,空格和# 完好无损。

我认为问题在于我匹配四个字符但只想替换三个。我假设我需要一个非捕获组或一些环顾四周。我在 Debuggex 中尝试了以下表达式:

[^@](?:(STR))

正则表达式可视化

调试演示

这似乎可以工作并选择三个字符,如果它们不跟随 @,但 Dynamics AX 似乎不支持。我查看了此页面以获取 X++ RegEx 支持,但找不到任何可以解决我的问题的语法。

是否可以更改上述作业以产生以下输出:“ FOO @STR #FOO”。

4

1 回答 1

5

我很难考虑使用有限的正则表达式语法的单一替换解决方案。我有一个解决方案,但它不是最佳的,可能不适用于您的具体情况。

static void simpleReplace(Args _args)
{
    TextBuffer txtb = new TextBuffer();         

    txtb.setText(" STR @STR #STR");
    txtb.regularExpressions(true);

    txtb.replace("STR", "FOO");
    txtb.replace("@FOO", "@STR");
    info(txtb.getText());        
}

将 all 替换STRFOOthen all@FOO替换为@STR。它应该具有相同的效果,但是这对您来说可能并不理想,具体取决于数据。

于 2015-12-30T18:35:55.630 回答