在正则表达式中查找模式中的字符

时间:2016-11-13 06:06:38

标签: regex impala

我试图在字符串

中的引号内找到所有equals的出现

如果我的输入字符串是:

anything='', bob2='age=24, sex=M', dilan=24, noble1='yellow'

我希望找到我的角色如下

anything='', bob2='age=24, sex=M', dilan=24, nobel1=24
                      ^       ^

然后将其替换为

anything='', bob2='age~24, sex~M', dilan=24, nobel1=24
                      ^       ^

我尝试了以下内容来查找所有出现的内容

'[^',].+?'

但那没用。

3 个答案:

答案 0 :(得分:0)

  

您可以使用这些组使用正则表达式执行此操作。

试试这段代码:

(?<=age)(\=)(\S+\s\w+)(\=)

然后,用~替换第1组和第3组,并保持第2组完整:~$2~

演示:https://regex101.com/r/qxR9ty/1

<强>更新

您可以首先使用@Maverick_Mrt建议的否定反馈,然后通过添加|来取消您要排除的任何类别,例如cat1|cat2

(?<!app|policy_name|dvc_host|sender|sal)\=

演示:https://regex101.com/r/qxR9ty/

答案 1 :(得分:0)

仅通过正则表达式实现您的要求非常困难。

我想通过char迭代String char来实现它。

请检查以下代码。我把评论放在里面。我正在使用Java,但您可以在其中使用该算法。

public class Main {
    public static void main(String args[]){
        String input = "param1='', param2='age<b>=</b>24, sex<b>=</b>M', param3=24, param4='yellow'";
        char[] arr = input.toCharArray();
        boolean close = true;

        /**
         * Iterate the char array
         */
        for(int i = 0;i < arr.length;i++){
            if(arr[i] == '\''){

                /**
                 * Ignore the escaped ' char in ''
                 */
                if(i > 0 && arr[i - 1] == '\\'){
                    break;
                }

                /**
                 * Use close to check whether equal sign is inside the ''
                 */
                if(close){
                    close = false;
                }else{
                    close = true;
                }
            }else if(arr[i] == '='){
                if(!close){
                    arr[i] = '~';
                }
            }

            System.out.print(arr[i]);

        }
    }
}

答案 2 :(得分:0)

试试这个:

(?<!param[\d+])=

并替换为:

击穿: 它将寻找任何'='并将看到它是否先于param [\ d +]。 如果没有param \ d +之后,它将捕获=符号。

那个=将被〜

取代

Explanation