Regex 选择三个字符,除非它们跟在TextBuffer.replace()的@符号后面
我想选择并替换三个字符,比如说“STR”,除非它们在@符号之后 我使用替换方法。我可以替换这三个字符,但它也会替换这三个字符之前的字符 这是我的代码:Regex 选择三个字符,除非它们跟在TextBuffer.replace()的@符号后面,regex,string,axapta,x++,dynamics-ax-2012-r3,Regex,String,Axapta,X++,Dynamics Ax 2012 R3,我想选择并替换三个字符,比如说“STR”,除非它们在@符号之后 我使用替换方法。我可以替换这三个字符,但它也会替换这三个字符之前的字符 这是我的代码: static void simpleReplace(Args _args) { TextBuffer txtb = new TextBuffer(); txtb.setText(" STR @STR #STR"); txtb.regularExpressions(true); txtb.rep
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++正则表达式支持,但找不到任何语法可以解决我的问题
是否可以更改上面的作业以生成此输出:“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
。它应该具有相同的效果,但是根据数据的不同,这可能不适合您。您知道X++是否支持向后看吗?如果是这样,请尝试以下操作:(?对于上述regexIf X++不支持查找的示例,请尝试以下操作:([^@])STR
,并将替换字符串更改为$1FOO
(可能是\1FOO
,具体取决于语法)感谢所有的选项!不幸的是,它们都不起作用。我还以为它会基于C#,但我猜自从Dynamics的Axapta时代以来,TextBuffer类就已经存在,它是基于X++的。我想出了一个新的答案。这是我能想到的最好的答案,语法有限。虽然不是一个很好的解决方案,但我同意这是probably是解决此问题的最快方法。在我的数据中,有“@STR”需要保留“@STR”,但根据你的建议,我可以分三步替换文本。谢谢!@TinavanderVyver没问题!这是我能想到的最好的事情:/