2017-10-20 1 views
1

문자와 숫자를 제외한 모든 문자를 대체 할 정규식이 필요한 Java 응용 프로그램이 있습니다 (스페인어 문자를 비롯하여 강조된 모음 및 ñ/Ñ). 또한 일부 특정 문자 우주 문자. 모든 스페인어 문자와 숫자를 포함하는 정규식

나는 다음과 같은 정규 표현식을 생성하지만 æ처럼 또는 다른 사람 ... 다른 사람을 ... 또한 난 그냥 싶어 그 문자를 사용할 수

string.replaceAll("[^-_/.,a-zA-Z0-9 ]+","") 

생각되지 않습니다 강조 모음을 제거 아니에요

+0

특정 문자 집합 만 허용 하시겠습니까? äöüèéâ 등을 포함한 ñ/Ñ 또는 모든 악센트와 마찬가지로? – Felk

+0

네, 저것 ... 나는 포르노와 같은 다른 캐릭터를 얻고 싶지 않습니다. – Faabass

+0

당신은'replaceAll ("...", "")로 아무것도 받아들이지 않거나 "얻습니다" '당신은 "문자를 제거합니다. 무엇을 제거해야합니까? 예제를 제공하십시오. łąka123! @ # $ %^& *() _ + "'에 대한 예상 출력은 얼마입니까? –

답변

1

당신은 a-zA-Z 대신 \p{L}을 사용할 수 있습니다 :

string = string.replaceAll("[^-_/.,\\p{L}0-9 ]+",""); 

\p{L} 일치하는 모든 유니 코드 문자에 관계없이 정규 표현식 컴파일에 전달 수정의.

은 참조하십시오 Java test :

List<String> strs = Arrays.asList("[email protected]#Łąka$%^", "Word123-)(=+"); 
for (String str : strs) 
    System.out.println("\"" + str.replaceAll("[^-_/.,\\p{L}0-9 ]+","") + "\""); 

출력 :

"Łąka" 
"Word123-" 

패턴이를 상세 사항 : [^-_/.,\\p{L}0-9 ]+ 패턴이 -, _, _, /, ., ,, 유니 코드 이외의 문자와 일치 문자, ASCII 숫자 및 공백으로 구성됩니다.

이 솔루션을 사용하면 ٠١٢٣٤٥٦٧٨٩과 같은 유니 코드 숫자가 제거됩니다. 단지 À-ÿ를 추가 만 일반적인 유럽 문자 이외의 유니 코드 문자를 제거하려면

string = string.replaceAll("(?U)[^-_/.,\\p{Alnum} ]+",""); 

두 개의 비 편지를 빼기 :

당신은 일치하는 모든 유니 코드 문자와 숫자를 reall하는 Mena's suggested\p{Alnum}하지만 (?U) embedded flag option를 사용할 수있다 ×÷ 범위에서 :

string = string.replaceAll("(?U)[^-_/.,A-Za-zÀ-ÿ &&[^×÷]]+",""); 
+0

그래,하지만 난 모르겠다. 문자를 Łą 또는 다른 어떤 문자로 바꾸고 싶다. 나는 그 질문을 명확하게하기 위해 업데이트 할 것이다. 고마워! – Faabass

+0

@Faabass * 다음 regEx를 만들었지 만 아이디어가 아닌 스트레스가있는 모음도 제거하고 있습니다. * 정규식으로 'ł','ą' 등이 제거되지 않습니다. –

+0

@Faabass 패턴 세부 정보를 확인하십시오. –

0

"[^-_/.,\\p{Alnum} ]+" 

docs를 참조하십시오 : 당신은 악센트 문자를 포함하여 모든 알파벳 문자와 숫자를 대체 할 Alnum 스크립트를 사용할 수 있습니다 :

P {Alnum} 영숫자 \ [\ P {알파} \ P는 {숫자}]

참고하는 등의 교체가 현재에 영향을 모든 알파벳 문자,

당신은 실제로 사용자 정의 클래스를 부정하려는 경우 (하지 거기에 정의의 따라서 교체 다), 사용 :

"[^[-_/.,\\p{Alnum} ]]+" 

(^ 뒤에 추가 대괄호가 있음을 유의하십시오. 그렇지 않으면 리터럴 ^으로 해석됩니다).

편집

당신은 furtherly 사용하여 라틴어 문자 블록의 하위 집합으로 좁힐 수 있습니다

: 당신은 여전히 ​​몇 가지있을 것이라는 점을

String s = "a1᣹"; 
System.out.println(
    s.replaceAll("[^[-_/.,\\p{InBASIC_LATIN}\\p{InLATIN_1_SUPPLEMENT}0-9]]+","") 
); 

출력

Łą 

주 라틴어 1 보충어의 스페인어 이외의 문자는 here을 참조하십시오.

요구 사항을 추가로 제한하려면 특정 스페인어 문자로 고유 한 (긴) 문자 클래스를 정의해야 할 수 있습니다.

+0

그래,하지만 난 모르겠다. 문자를 Łą 또는 다른 어떤 문자로 바꾸고 싶다. 나는 더 명확하게하기 위해 질문을 업데이트 할 것이다. – Faabass

+0

@Faabass 제 편집을보고 좁힐 수도 있습니다. – Mena

관련 문제