如果我正在浏览这样的文本:
hello bob hello hello hello
我想找到hello的第一个实例并将其取出,所以我使用这样的模式
hello
当我擦除那个图案时,这就是文本
bob
但我需要的是
bob hello hello hello
如何修改它以仅找到模式的第一次出现
如果我正在浏览这样的文本:
hello bob hello hello hello
我想找到hello的第一个实例并将其取出,所以我使用这样的模式
hello
当我擦除那个图案时,这就是文本
bob
但我需要的是
bob hello hello hello
如何修改它以仅找到模式的第一次出现
我的水晶碗告诉我你在你的正则表达式中使用了某种global
修饰符,如果你把它去掉,那么你应该得到你期望的结果。例如,在 javascript 中,您将使用:
/hello/
代替:
/hello/g
在 OutSystems 中,正则表达式函数是通过扩展提供的,所以我假设您正在使用Text
扩展。扩展代码映射到 .NET/Java 代码,并且对正则表达式方法的底层调用Replace(string input, string replacement)
用于 .NET 和replaceAll(String replacement)
Java。这些都将替换给定输入字符串上出现的所有正则表达式。
现在,有几种方法可以解决您的问题...
如果要替换字符串的开头:
在您给出的示例中,您有兴趣删除的hello也在输入字符串的开头。在这种特殊情况下,您可以使用正则表达式,例如^hello
.
如果您想替换字符串中的任何位置的第一个匹配项:
如果您有兴趣替换第一个匹配项,但它可以是输入字符串中的任何位置,那么您可以编写一个表达式,例如hello(.*)
并用作替换字符串$1
。在这种情况下,$1
这意味着捕获组(.*)
将包括所有进一步出现的hello。这适用于.NET和Java。当然,这种做事方式既不漂亮也不高效,所以......
如果您想拥有更多正则表达式功能:您可以使用 Integration Studio 下载并打开 Text 扩展并添加您想要的任何新方法,尽管由于此扩展包含在平台中并且可以通过升级替换,我会建议创建您自己的扩展并使用 Text 扩展作为模板。您可以创建一个与当前非常相似的扩展操作,Replace
但这可能需要一个额外的计数参数或类似的东西。