我想选择并替换三个字符,比如"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".
我很难想到单个替换解决方案,允许使用正则表达式的有限语法.我有一个解决方案,但它不是最佳的,可能无法在您的具体情况下工作.
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()); }
更换所有STR
有FOO
那么所有@FOO
使用@STR
.它应该具有相同的效果,但根据数据,这可能不适合您.