2017-03-27 13 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'を削除すると、ハイフネーションされた単語にはまったく影響しません。あなたは、すべてのハイフンも削除したいが、言葉の間にあるものは保持したいと言っているのですか?この質問は*不明です*。 –

+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

    すべての句読点や空白を除去するが、小数点を維持し、ハイフネーションされた単語

    それはバックリファレンスを使用して置き換えられます。

    Javaコード:

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

    RegEx Demo

    正規表現の分裂:

    • ( - キャプチャを開始グループ
      • \\.\\d+ - OR
      • \\w+(?:-\\w+)+ - - マッチハイフネーションされた単語
    • )? - 桁
    • 続いDOT
    • |マッチ終了
    • [\\s\\p{P}]+グループの後にグループによる?をキャプチャオプション - マッチ1つ以上の空白または句読記号

    置き換え文字列は"$1 "です。これはオプションのグループ#1に1つのスペースが後置されていることを意味します。

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

    更新:

    ハイフンのため

    を追加しましたコンディショニング(?<!\w)-(?!\w)

    をして" "

    説明によって置き換え:

    関連する問題