gpt4 book ai didi

java - 保留连字符,除非在正则表达式的单词末尾

转载 作者:行者123 更新时间:2023-11-30 01:43:17 25 4
gpt4 key购买 nike

我正在尝试将文本文件加载到我的 java 程序中。因此,我编写了以下正则表达式:

lineWords = line.replaceAll("[^a-zA-Z\\- ]", "").toLowerCase().split("\\s+");

这通常可以很好地保留连字符的单词,但输入文件中的单词之一以连字符结尾(不幸的是,我无法控制这一点)。我一直在寻找一种方法来保留单词中的连字符,但如果它们位于单词末尾则将其删除。任何想法将不胜感激。

最佳答案

要保留连字符(除非位于单词末尾),您可以使用 alternation .

匹配除字符类中列出的字符之外的任何字符,或者匹配连字符并使用环视断言左侧是单词字符,右侧不是非空白字符。

(?:[^a-zA-Z -]|(?<=\w)-(?!\S))

部分内容

  • (?:非捕获组
    • [^a-zA-Z -]匹配除列出的任何字符
    • |或者
    • (?<=\w)-(?!\S)断言左侧是单词字符并断言右侧不是非空白字符
  • )关闭群组

Regex demo | Java demo

在Java中

(?:[^a-zA-Z -]|(?<=\\w)-(?!\\S))

例如

String line = "this is a test $%$ test- test-test and -test ()";
String[] lineWords = line.replaceAll("(?:[^a-zA-Z -]|(?<=\\w)-(?!\\S))", " ").toLowerCase().split("\\s+");
System.out.println(Arrays.toString(lineWords));

输出

[this, is, a, test, test, test-test, and, -test]

关于java - 保留连字符,除非在正则表达式的单词末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59159502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com