java - 使用 RegEx 时如何保留分隔符?

标签 java regex separator punctuation

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

假设我有这段文字:

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))"
        + ")"
        + ")";

最佳答案

您确定要使用正则表达式吗? 有一个更快的按单个字符拆分的实现: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...
}

关于java - 使用 RegEx 时如何保留分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7127384/

相关文章:

java - PowerMockito.when 返回 null

java - JMeter主从

c# 如何用小数点分隔一个整数?

mysql - GROUP_CONCAT 逗号分隔符 - MySQL

ios - 在 Swift 中向 Int 添加千位分隔符

Java Swing 两个表单类

java - 自动售货机,输入变量无法识别以进行计算

c# - 从 .net 中的 youtube url 中提取视频 ID

javascript - regex.test() 每隔一段时间才有效

jquery - 不允许使用正则表达式为零