用于替换除引号之外的所有特殊字符的正则表达式模式

时间:2014-03-19 06:37:23

标签: regex salesforce

我需要在salesforce中使用正则表达式模式来替换字符串中的所有特殊字符,除了引号之间的那些...

输入:hai@#$welcome to 'World@#$'
输出:hai welcome to 'World@#$'

我尝试了以下操作,但它没有按预期工作:

'[^\\w((?<=\')(.*)(?=\'))]'

3 个答案:

答案 0 :(得分:3)

您的搜索正则表达式应该是:

[^\w\s'](?=(([^']*'){2})*[^']*$)

并替换为:

" "

在线演示:http://regex101.com/r/lC6zG5

<强>解释

enter image description here enter image description here

答案 1 :(得分:1)

使用此[^\w\s\'](?=(([^']*'){2})*[^']*$)

<\ n>与Anubhavas回答相同,只是稍微改动以排除'

演示:http://regex101.com/r/iL7oH7

答案 2 :(得分:0)

manoj,复活这个问题,因为有一个没有提到的整洁解决方案。此问题是此问题中解释为"regex-match a pattern, excluding..."

的技术的典型案例

我们可以通过一个非常简单的正则表达式解决它:

'[^']*'|([^\w'\s]+)

交替|的左侧匹配完成quoted strings。我们将忽略这些匹配。右侧匹配并捕获第1组的特殊字符,我们知道它们是正确的,因为它们与左侧的表达不匹配。

剩下要做的就是用空字符串替换匹配,但仅在设置了组1时。每种语言的方法都不同,但并不复杂。下面的问题和文章充分解释了该技术(文章有代码示例)。

this demo上,如果查看右侧窗格,您可以看到第1组如何仅捕获要替换的字符。

参考