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

zazmityj  于 2021-06-26  发布在  Impala
关注(0)|答案(3)|浏览(400)

我试图在字符串的引号中找到所有出现的等号
如果我的输入字符串是:

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
                      ^       ^

我试着找出下面发生的一切

'[^',].+?'

但那没用。

4uqofj5v

4uqofj5v1#

仅仅用regex实现您的需求是相当困难的。
我想逐字符迭代字符串来实现它。
请检查下面的代码。我已经把评论放进去了。我使用的是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]);

        }
    }
}
qaxu7uf2

qaxu7uf22#

您可以使用组对regex执行此操作。
请尝试以下代码:

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

然后,将第1组和第3组替换为 ~ ,保持第二组完整: ~$2~ 演示:https://regex101.com/r/qxr9ty/1
更新
您可以首先使用@maverick\u mrt建议的负lookback,然后通过添加 | 例如 cat1|cat2 ```
(?<!app|policy_name|dvc_host|sender|sal)=

演示:https://regex101.com/r/qxr9ty/
hgc7kmma

hgc7kmma3#

试试这个:

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

替换为:
~
breakdown:它将查找任何“=”,并查看它是否在param[\d+]之前。。如果前面没有param\d+,则它将捕获=符号。
将替换为~
解释

相关问题