当前位置:  开发笔记 > 编程语言 > 正文

选择三个字符,除非它们遵循TextBuffer的@符号.replace()

如何解决《选择三个字符,除非它们遵循TextBuffer的@符号.replace()》经验,为你挑选了1个好方法。

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

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

这是我的代码:

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))

正则表达式可视化

Debuggex演示

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

是否可以更改上面的作业以产生此输出:"FOO @STR #FOO".



1> d0nut..:

我很难想到单个替换解决方案,允许使用正则表达式的有限语法.我有一个解决方案,但它不是最佳的,可能无法在您的具体情况下工作.

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());        
}

更换所有STRFOO那么所有@FOO使用@STR.它应该具有相同的效果,但根据数据,这可能不适合您.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有