2014-03-24 2 views
-2

String에 허용되는 정규 표현식을 사용하고 있습니다.정규식을 사용하여 String의 다른 모든 항목을 제거합니다.

^\pL*['#-]?\pL*\$ 

요구 사항이 변경되어 이제는 String에서 다른 모든 항목을 삭제해야합니다. 예를 들어, 특수 문자 ', # 및 - 중 하나만 허용됩니다.

어떻게이 정규 표현식을 변경하여 적합하지 않은 모든 것을 삭제할 수 있습니까?

JohnO'Connell -> allowed. should be as is. 
JohnDias  -> allowed. should be as is. 
JohnOConnell' -> allowed. should be as is. 
JohnOConnell# -> allowed. should be as is. 
JohnOConnell- -> allowed. should be as is. 
JohnOConnell-# -> should return JohnOConnell- 
JohnOConn34ell -> should return JohnOConnell 
*JohnOConnell -> should return JohnOConnell 
JohnOConnell* -> should return JohnOConnell 
JohnOConn$%ell -> should return JohnOConnell 

감사

+0

귀하의 정규식이 올바르지 보인다 여기

예상 값의 목록입니다. '\ pL '은'\ p {L}'이 아니어야합니까? 또한'$ '를 벗어나므로 옳지 않은 것처럼 보입니다. 지금 귀하의 질문에 대한 명확하지 않습니다 (적어도 나를 위해). 어쩌면 정규 표현식 옆에 입력, 예상 출력 및이 출력이 예상되는 이유에 대한 예제를 제공 할 수 있습니다. – Pshemo

+2

나는 그것을 이해하기가 어렵다. 몇 가지 예를 들려 줄 수 있습니까? – mvw

+0

질문에 대한 추가 정보가 있습니다. 시간을내어 주셔서 감사합니다. – user1860447

답변

0

내가 제대로 이해한다면, 당신은 이런 식으로 할 수있는 :

// Test data 
def tests = [ [ input:"JohnO'Connell", output:"JohnO'Connell" ], 
       [ input:"JohnDias",  output:"JohnDias" ], 
       [ input:"JohnOConnell'", output:"JohnOConnell'" ], 
       [ input:"JohnOConnell#", output:"JohnOConnell#" ], 
       [ input:"JohnOConnell-", output:"JohnOConnell-" ], 
       [ input:"JohnOConnell-#", output:"JohnOConnell-" ], 
       [ input:"JohnOConn34ell", output:"JohnOConnell" ], 
       [ input:"*JohnOConnell", output:"JohnOConnell" ], 
       [ input:"JohnOConnell*", output:"JohnOConnell" ], 
       [ input:"JohnOConn\$%ell", output:"JohnOConnell" ] ] 

String normalize(String input) { 
    int idx = 0 
    input.replaceAll(/[^A-Za-z'#\-]/, '') // remove all disallowed chars 
     .replaceAll(/['#\-]/) { match -> // replace 2nd+ instance of special chars 
      idx++ == 0 ? match : '' 
     } 
} 

tests.each { 
    assert normalize(it.input) == it.output 
} 
+0

그것은 매력처럼 작동했습니다! 정말 고맙습니다 :) – user1860447

관련 문제