发现在一个模式的字符在正则表达式

问题描述:

我试图找到引号中的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 
        ^ ^

我尝试以下查找所有occurances

'[^',].+?' 

但没有工作。

+0

您正在使用什么工具/语言所取代?一个可能的答案可能取决于它。你的字符串是否总是格式良好(引号内没有转义序列)? –

+0

使用的语言是Hadoop Impala SQL。引号内没有转义序列 –

+0

引号内不会有任何引号。所以param2 ='年龄= '24',性别='M''将永远不会成为这个问题的合法案例 –

您可以使用这些组与正则表达式。

试试这个代码:

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

然后,代替第一和第三组~,并保持第二组完整:~$2~

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

更新

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

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

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

+0

谢谢。但有一个问题,我wouldnt能够硬编码“年龄” –

+0

@GeorgeJoseph尝试更新的代码 – Ibrahim

+0

我将无法预测的参数列表像app | policy_name硬编码 –

这是相当困难只是正则表达式来实现您的要求。

我想通过字符来迭代字符串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]); 

     } 
    } 
} 
+0

谢谢。我应该更具体。使用的语言是Impala SQL, –

试试这个:

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

而取代本:

细分: 它会寻找任何 '=',并且要查看是否通过PARAM之前[\ d +]或者不是。 如果没有param \ d +,那么它将捕获=符号。

这=将由〜

Explanation

+0

感谢您接近。我应该已经更具体了实际的字符串可以是这样的app ='',policy_name ='age = 24,sex = M,sal = 300',dvc_host = 24,sender =''。所以我不能硬编码“参数”。 –