【问题标题】:How to keep the delimiter while using RegEx?使用 RegEx 时如何保留分隔符?
【发布时间】:2011-10-30 22:34:26
【问题描述】:

我做了一个关于标点符号和正则表达式的问题,但它很混乱。

假设我有这个文本:

String text = "wor.d1, :word2. wo,rd3? word4!"; 

我正在这样做:

String parts[] = text.split(" ");

我有这个:

wor.d1, | :word2. | wor,d3? | word4!;

我需要做什么才能做到这一点?(将符号保留在边框上,但仅我指定:.,!?:,而不是全部)。

wor,d1 | , | : | word2 | . | wor,d3 | ? | word4 | !

更新

我使用这些正则表达式得到了一些不错的结果,但它在单词开头的所有标点符号拆分之前给出了一个空字符。

有没有办法在开始时不使用这个空字符?

这个正则表达式好不好,还是有更简单的方法?

public static final String PUNCTUATION_SEPARATOR =
        "("
        + "("
        + "(?=^[\"'!?.,;:(){}\\[\\]]+)"
        + "|"
        + "(?<=^[\"'!?.,;:(){}\\[\\]]+)"
        + ")"
        + "|"
        + "("
        + "(?=[\"'!?.,;:(){}\\[\\]]+($|\n))"
        + "|"
        + "(?<=[\"'!?.,;:(){}\\[\\]]+($|\n))"
        + ")"
        + ")";

【问题讨论】:

标签: java regex separator punctuation


【解决方案1】:

您确定要使用正则表达式吗? 有一个更快的单字符分割实现:StringTokenizer。 它可以返回分隔符。

String str= "word1, word2. word3? word4!";
String delim = ",.!?";
StringTokenizer st = new StringTokenizer(str, delim, true);
while (st.hasMoreTokens()) {
  String token = st.nextToken();
  ... // token will be: "word1", ",", " word2", ".", etc...
}

【讨论】:

  • 这可行,但需要是正则表达式或更复杂的东西,因为我只想吐在边界(开始和结束)而不是中间。
  • 我的意思是如果符号在字符串的中间(ab,20.50),我不想分裂,只在边界(测试,[100等)。跨度>
【解决方案2】:

对于简单的分隔符,我推荐使用 StringTokenizer。但这里有一个使用正则表达式和另一个辅助分隔符的解决方案:

String s  = "one,two, three   four ,  five";
s = s.replaceAll("([,\\s]+)", "#$1#");
Pattern p = Pattern.compile("#");
String[] result = p.split(s);

【讨论】:

    【解决方案3】:

    这是我认为可行的正则表达式:

    /\s|(?=[\.,:?!](\W|$))|(?<=\W[\.:?!])/
    

    【讨论】:

      【解决方案4】:

      在我看来你想要this。首先你分解你的字符串,第二步你使用 implode 函数。

      【讨论】:

        【解决方案5】:
        public static final String PUNCTUATION_SEPARATOR =
            "("
            + "("
            + "(?=^[\"'!?.,;:(){}\\[\\]-]+)"
            + "|"
            + "(?<=^[\"'!?.,;:(){}\\[\\]-]+)"
            + ")"
            + "|"
            + "("
            + "(?=[\"'!?.,;:(){}\\[\\]-]+($|\n))"
            + "|"
            + "(?<=[\"'!?.,;:(){}\\[\\]-]+($|\n))"
            + ")"
            + ")";
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-24
          • 1970-01-01
          • 1970-01-01
          • 2013-08-08
          • 2013-03-18
          相关资源
          最近更新 更多