Select 三个字符,除非它们跟在 TextBuffer .replace() 的 @ 符号之后
Select three characters unless they follow an @ sign for the TextBuffer .replace()
我想 select 并替换三个字符,比如 "STR",除非它们在 @ 符号之后。
我使用 text buffer class 替换方法。我可以替换三个字符,但它也替换了三个字符之前的字符。
这是我的代码:
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”,space 和# 完好无损。
我认为问题在于我正在匹配四个字符,但只想替换三个。我假设我需要一个非捕获组或一些环顾四周。我在 Debuggex 中尝试了以下表达式:
[^@](?:(STR))
这似乎有效,并且 select 如果三个字符不跟在 @ 后面,则它们是有效的,但似乎不受 Dynamics AX 的支持。我查看了 this page 以获得 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
。它应该具有相同的效果,但是根据数据,这可能不适合您。
我想 select 并替换三个字符,比如 "STR",除非它们在 @ 符号之后。
我使用 text buffer class 替换方法。我可以替换三个字符,但它也替换了三个字符之前的字符。
这是我的代码:
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”,space 和# 完好无损。
我认为问题在于我正在匹配四个字符,但只想替换三个。我假设我需要一个非捕获组或一些环顾四周。我在 Debuggex 中尝试了以下表达式:
[^@](?:(STR))
这似乎有效,并且 select 如果三个字符不跟在 @ 后面,则它们是有效的,但似乎不受 Dynamics AX 的支持。我查看了 this page 以获得 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
。它应该具有相同的效果,但是根据数据,这可能不适合您。