2016-11-13 3 views
1

내 입력 문자열 인 경우 나 문자열정규 표현식 패턴에서 문자를 찾는

에 따옴표 내에서 등호의 모든 차례 나오는 찾기 위해 노력하고있다 : 나는 나의 문자를 찾고자

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

을 이어 다음과

는 내가 모든 차례 나오는

'[^',].+?' 

그러나 didnt 한 일을 찾기 위해 다음과 같은 노력했다.

+0

로 대체 될 것이다?가능한 대답은 그것에 따라 달라질 수 있습니다. 문자열이 항상 형식이 잘 맞습니까? 따옴표 안에 이스케이프 시퀀스가 ​​없습니까? –

+0

사용되는 언어는 Hadoop Impala SQL입니다. 따옴표 안에 이스케이프 시퀀스가 ​​없습니다. –

+0

따옴표 안에 따옴표가 없습니다. 그래서 param2 = 'age = '24', sex = 'M' '은이 질문에 결코 합법적 인 사례가 될 수 없습니다. –

답변

0

정규 표현식으로 그룹을 사용할 수 있습니다. ~로 1, 3 그룹을 대체, 그리고

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

, 그대로 제 2 그룹을 유지 :

이 코드를 시도 ~$2~

데모 : https://regex101.com/r/qxR9ty/1

업데이트

@Maverick_Mrt에서 제안한대로 Negative Lookbehind를 먼저 사용할 수 있습니다. 제외 할 카테고리를 취소하려면 |을 추가하십시오. cat1|cat2

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

데모 : https://regex101.com/r/qxR9ty/

+0

고마워요. 하지만 문제가있다, 나는 하드 코드 "age"를 쓸 수 없을 것이다. –

+0

@GeorgeJoseph 업데이트 된 코드를 시도하십시오. – Ibrahim

+0

app | policy_name과 같은 매개 변수 목록을 예측할 수 없게됩니다. –

0

그냥 정규식에 의해 귀하의 요구 사항을 구현하는 것은 매우 어렵습니다.

char를 구현하기 위해 String char을 반복하고 싶습니다.

아래 코드를 확인하십시오. 나는 그 안에 주석을 넣었다. Java를 사용하고 있지만 알고리즘을 활용할 수 있습니다. 이것에 의해

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

을 그리고 대체 :

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, –

0

이 시도

~

고장 : 그것은 어떤 '='를 찾습니다 및 그 PARAM에 의해 선행 있는지 확인합니다 [\ d +] 그렇지 않다면 .. param \ d +가 나오지 않으면 = 기호를 포착합니다.

= 당신이 사용하는 어떤 도구/언어 ~

Explanation

+0

입니다. 거의 감사합니다. 좀 더 구체적이어야합니다. 실제 문자열은이 app = '', policy_name = 'age = 24, sex = M, sal = 300', dvc_host = 24, sender = '<[email protected]>'과 같을 수 있습니다. 그래서 나는 "param"을 하드 코딩 할 수 없다. –