如何编写正则表达式以这种格式拆分字符串?

时间:2016-08-19 03:34:34

标签: java regex string

我想使用[,.!?;~]分割字符串,但我希望将[,.!?;~]保留到其位置,例如:

  

这是一个例子,但还不够

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

正如您所看到的,逗号仍然存在。我用这个正则表达式(?<=([,.!?;~])+)做了这个。 但是我想要一些特殊的词(例如:但是)在[,.!?;~]之后,然后不要分割那部分字符串。例如:

  

我希望将这句话分成这种形式,但该怎么做。因此,如果   任何人都可以提供帮助,这将是伟大的

[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

正如你所看到的那样,这部分(形式,但是)并没有在第一句中分割。

1 个答案:

答案 0 :(得分:2)

我已经使用过:

  1. 正面观察(?<=a)b以保留分隔符。
  2. 否定前瞻a(?!b)以排除停用词。
  3. 请注意我在您提供的RegEx之后如何附加RegEx (?!\\s*(but|and|if))。你可以将所有那些你要排除的单词(例如,但是,如果)放在由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);
            }
        }
    }