2016-08-19 2 views
0

私は、文字列を分割する[,.!?;~]を使用したいが、私は[,.!?;~]は、例えばその場所にとどまるたい:この形式で文字列を分割するための正規表現を書くには?

これは一例ですが、それはへ

十分ではありません

[This is the example,, but it is not enough] // length=2 
[0]=This is the example, 
[1]=but it is not enough 

ご覧のとおり、コンマはそのままです。私はこの正規表現(?<=([,.!?;~])+)でこれを行いました。 しかし[,.!?;~]の後ろに特殊な単語(たとえば:があります)が来たら、その部分を分割しないでください。例:

この文章をこの形式に分割する必要があります。 誰でも助けることができる場合は、この部分(フォーム、しかし)は、最初の文をint分割されていない見ることができるように、それは

[0]=I want this sentence to be split into this form, but how to do. 
[1]=So if anyone can help, 
[2]=that will be great 

素晴らしいものです。

+3

否定先読みを使用してください。 '(?<= [、。!?;〜])(?!しかし)'。 –

答えて

2

私が使用してきました:

  1. 正の後方参照(?<=a)bを区切り文字を維持します。
  2. 負の先読みa(?!b)は、ストップワードを除外します。

RegEx (?!\\s*(but|and|if))は、提供されたRegExの後にどのように追加されているのでしょうか。 pipe symbolで区切られた括弧の中に除外したすべての停止単語を置くことができます(例えば、しかし、もしあれば)。

区切り記号がまだその場所にあることに注意してください。

出力

Count of tokens = 3 
I want this sentence to be split into this form, but how to do. 
So if anyone can help, 
that will be great 

コード

import java.lang.*; 

public class HelloWorld { 
    public static void main(String[] args) { 
     String str = "I want this sentence to be split into this form, but how to do. So if anyone can help, that will be great"; 
     //String delimiters = "\\s+|,\\s*|\\.\\s*"; 
     String delimiters = "(?<=,)"; 

     // analyzing the string 
     String[] tokensVal = str.split("(?<=([,.!?;~])+)(?!\\s*(but|and|if))"); 

     // prints the number of tokens 
     System.out.println("Count of tokens = " + tokensVal.length); 

     for (String token: tokensVal) { 
      System.out.println(token); 
     } 
    } 
} 
+1

ありがとうございました!それが欲しいものです。 –

関連する問題