Java - 正则表达式分割输入文本但保留分隔符

标签 java regex

寻找一些正则表达式帮助。我正在寻找一种 Java 方法来按单词分割一些输入文本,但同时保留分隔符(空格、标点符号)。另一种表达方式是将单词拆分到它们自己的索引中,其他非单词字符可能位于数组的其他索引中。

此输入文本:

"Hello, this isn't working!"

应该放入这样的数组中:

{"Hello", ",", "this", "isn't", "working", "!"}

{"Hello", ", ", "this", " ", "isn't", " ", "working", "!"}

我使用Python 做了基本相同的事情:

def split_input(string):
    return re.findall(r"[\w']+|[\s.,!?;:-]", string)

但我还没有找到一种方法在 Java 中完成同样的事情。我试过String.split()使用lookahead/lookbehind,我尝试过模式匹配器,但运气不佳。

任何帮助将不胜感激!

最佳答案

split 并不是 Python 的 findall 的 Java 模拟。 Matcher.find 是。

Pattern stuff = Pattern.compile("[\\w']+|[\\s.,!?;:-]");
Matcher matcher = stuff.matcher("Hello, this isn't working!");
List<String> matchList = new ArrayList<String>();
while (matcher.find()) {
    matchList.add(matcher.group(0)); // add match to the list
}

关于Java - 正则表达式分割输入文本但保留分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15879495/

相关文章:

java - 如何创建绑定(bind)文件以将 complexType 更改为 simpleType

java - 尝试使用 javax.annotation.Nullable 时无法编译 GWT 模块?

正则表达式匹配以非空格为界的逗号

python - 创建一个正则表达式以删除 python 换行符后的空格

java - 如何使用匹配器从字符串中拉出 double

java - 传播 Akka 的 PoisonPill 消息

java - 如何修复或处理部署在 Apache Tomcat 7.0.41 中的 Java Struts 1.3 应用程序中的 File Reaper 线程内存泄漏问题?

java - Google Reader 编辑 API 身份验证问题

javascript - 仅适用于几个字符的正则表达式 (regex)

java - 验证电子邮件(不发送确认)