2017-03-27 12 views
2

모든 구두점과 공백을 제거 할 수 있지만 소수점과 하이픈이있는 단어는 그대로 둘 수있는 정규식을 만들려고합니다. 지금까지 내가 가지고 :모든 구두점을 제거하지만 소수점과 하이픈이있는 단어는 그대로 두십시오.

String doc = "THE SOCIAL IMPACT OF THE CHERNOBYL DISASTER BY DAVID R. MARPLES (ST. MARTIN'S PRESS: $35, CLOTH; $14.95, PAPER; 316 PP., ILLUSTRATED; 0-312-02432-0)"; 
String doc = doc.replaceAll("[^a-zA-Z_0-9-]+", " ").toLowerCase(); 

그것은 소수점을 포함하여 모든 점을 제거합니다.

도트가 문자 또는 숫자로 둘러 쌓인 경우 어떻게 구별 할 수 있습니까?

예상 출력 :

the social impact of the chernobyl disaster by david r marples st martin s press 35 cloth 14.95 paper 316 pp illustrated 0-312-02432-0 
+2

원하는 출력의 예를 제공 할 수 있습니까? – joshweir

+0

'punctuations'와'whitespaces'를 제거하면 하이픈이 찍힌 단어에 전혀 영향을 미치지 않습니다. 너는 모든 hypens를 제거하고 그러나 낱말 사이에서 그들을 지키고 싶다는 것을 의미하는 것을 의미 하는가? 이 질문은 * 불분명하다. –

+0

기대되는 결과 : 데이비드 마클린 세인트 마틴의 체르노빌 재해의 사회적 영향 언론 35 옷감 14.95 종이 316 pp 일러스트레이션 0-312-02432-0 –

답변

1

이 시도 할 수

  1. [^a-zA-Z0-9_.-] 처음 정규식에 점이 포함되어 처음에 일치하지 않습니다. 도트가 앞에 숫자가되지 않고, 제 (?!\d) 후 교체

Regex Demo

Java Demo 샘플 소스를 도트 일치 숫자 따르지 수단 경우 (?<!\d)

  • (?<!\d)\.(?!\d) 여기서 제 의미 :

    final String regex = "[^a-zA-Z0-9_.-]|(?<!\\d)\\.(?!\\d)|(?<!\\w)-(?!\\w)"; 
    final String string = "THE - . SOCIAL IMPACT OF THE CHERNOBYL DISASTER BY DAVID R. MARPLES " 
         + "(ST. MARTIN'S PRESS: $35, CLOTH; $14.95, PAPER; 316 PP., ILLUSTRATED; 0-312-02432-0)\n\n\n"; 
    
    String result=string.replaceAll(regex," "); 
    System.out.println(result); 
    
  • +0

    OP는 단지 '소수점'을 언급 했으므로 소수점 만 의미한다고 가정 할 수 있습니다. – anubhava

    0

    제거 당신은 진수를 일치 넣어하는 옵션 캡처 그룹을 사용할 수 있습니다

    모든 문장 부호와 공백하지만 소수점을 유지하고 하이픈 단어

    다시 역 참조를 사용하여 대체합니다.

    자바 코드 :

    String repl = str.replaceAll("(\\.\\d+|\\w+(?:-\\w+)+)?[\\s\\p{P}]+", "$1 ")); 
    

    RegEx Demo

    정규식 해체 :

    • ( - 캡처 시작 그룹
      • \\.\\d+ - 또는
      • \\w+(?:-\\w+)+ - - 경기 하이픈 단어
    • )? - 숫자
    • 다음 DOT
    • | 일치 끝
    • [\\s\\p{P}]+ 그룹 후 그룹 인해 ?을 캡처 선택 - 경기 1 개 이상의 공백 또는 구두 문자

    대체 문자열은 "$1 "입니다.이 그룹은 선택적 그룹 # 1과 그 뒤에 하나의 공백이있는 백 - 참조를 의미합니다.

    [^a-zA-Z0-9_.-]|(?<!\d)\.(?!\d)|(?<!\w)-(?!\w) 
    

    업데이트 :

    하이픈에 대한

    추가 조절 (?<!\w)-(?!\w)

    " "

    설명으로 대체 :

    관련 문제