当前位置: 首页 > 知识库问答 >
问题:

用Java中的正则表达式模式替换除特定序列的令牌之外的所有内容

吕峰
2023-03-14

我需要做一个方法,将检索词从文本没有任何东西(标点符号等),除了小写单词本身。

但是我用正则表达式模式挣扎了2个小时,遇到了这样一个问题。 课文中有“50年”这样的字眼。 使用我的正则表达式,输出将如下所示:

-年

而不是普通的

年份

但是我不能替换破折号“-”,因为还有另外一个连字符的单词应该留下。

下面是一个代码:

 public List<String> retrieveWordsFromFile() {
        List<String> wordsFromText = new ArrayList<>();

        scanner.useDelimiter("\\n+|\\s+|'");

        while (scanner.hasNext()) {
            wordsFromText.add(scanner.next()
                .toLowerCase()
                .replaceAll("^s$", "is")
                .replaceAll("[^\\p{Lower}\\-]", "")
            );
        }
        wordsFromText.removeIf(word -> word.equals(""));
        return wordsFromText;
    }

所以我怎么能说我需要用只以字母/S开头的破折号替换除文本和单词以外的所有东西。 那么这个正则表达式字符串可能应该是这样一个“合并”成一个序列的?

共有1个答案

从阎宝
2023-03-14

使用regex,\\b[\\p{low}]+\\b

演示:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        // Test strings
        String[] arr = { "Hello world", "Hello world 123", "HELLO world", "50-year" };

        // Define regex pattern
        Pattern pattern = Pattern.compile("\\b[\\p{Lower}]+\\b");

        for (String s : arr) {
            // The string to be matched
            Matcher matcher = pattern.matcher(s);

            while (matcher.find()) {
                // Matched string
                String matchedStr = matcher.group();

                // Display the matched string
                System.out.println(matchedStr);
            }
        }
    }
}

输出:

world
world
world
year

正则表达式说明:

  1. \b种词界。
  2. +指定一个或多个字符。
 类似资料:
  • 我想知道如何使用正则表达式删除除所有图像标记之外的所有内容。 我已经试过了: (?s)^[^ (?s)^([^ 有谁知道如何将这 2 个组合为多个图像? 下面是我想应用它的内容示例: 我期望的结果应该是:

  • 我正在尝试使用方法,只保留字母字符和。我试图用一个空字符串替换每个既不是字母也不是上述字符的字符。 到目前为止,我已经尝试过这样的东西(在不同的变体中),它正确地保留字母,但替换了我想要保留的特殊字符:

  • 我对正则表达式很陌生,正在寻找一个匹配任何东西的表达式,除了所有匹配给定正则表达式的东西。我已经找到了除了特定字符串以外的任何东西的方法,但是我需要它不匹配一个正则表达式。它还必须在Java工作。 背景:我正在使用ANSI颜色的字符串。我想取一个字符串,它有一些文本,可能是用Ansi颜色代码格式化的,并删除除那些颜色代码以外的任何东西。这将给出附加到字符串上的任何字符的当前颜色格式。 格式化字符串

  • 我有一个字符串包括电子邮件。在它之前和/或之后可能有额外的字符。输入示例:

  • 问题内容: 我有这个字符串: 现在,我想在每个数字之前添加String num:。 因此结果必须是: 这也必须工作: 用于搜索数字的正则表达式是:[0-9]+ 但是我想用num:+ [匹配的子字符串]替换匹配的子字符串。 我现在写了一个带有数字的示例,但另一个示例可以是:在每个电子邮件地址之前添加 ·Email found·: 问题答案: 利用分组。您可以使用括号(并)定义组,并通过组索引$n在哪

  • 问题内容: 我有这个HTML: 我只需要匹配任何HTML标记之外的单词。我的意思是,如果我想匹配“简单”和“文本”,则只能从“这是简单的html文本”和最后一部分“文本”中获得结果- 结果将是“简单” 1匹配,“文本” 2火柴。有人可以帮我吗?我正在使用jQuery。 是我要匹配的单词(在这种情况下为“简单”) 是 我需要用来包装所有选定的单词(在此示例中为“简单”)。但是我只想包装 任何 HTM

  • 问题内容: 我正在使用Python,并且想在遇到句号(句号)或空格之前匹配所有单词。 目前,我正在使用: 上面的代码不匹配任何内容。我需要作为我的输出。 问题答案: 如果您只是从字符串中获取子集,我不明白为什么要使用正则表达式。 运作方式相同: 例: 正则表达式速度慢,设计笨拙且难以调试。肯定有occassions使用它,但如果你只是要提取的文本和,然后我不认为是这些场合之一。 参见:https