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

Java中正则表达式的奇怪行为

薛朝
2023-03-14
String cleanedText = text.toString().toLowerCase().replaceAll("[^a-zA-Z]", "");         
System.out.println(cleanedText);

我使用BufferedReader读取了一个txt文件。我将每一行添加到一个长字符串中,并将前面发布的代码应用于此。整个代码如下:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.lang.StringBuffer;
import java.util.regex.*;

public class Loader {

    public static void main(String[] args) {

        BufferedReader file = null;
        StringBuffer text = new StringBuffer();
        String str;

        try {
            file = new BufferedReader(new FileReader("text.txt"));
        } catch (FileNotFoundException ex) {
        }
        try

        {
            while ((str = file.readLine()) != null) {
                text.append(str);

            }

            String cleanedText = text.toString().toLowerCase().replaceAll("[^:a-z]", "");       
            System.out.println(cleanedText);
        } catch (IOException ex) {
        }
    }   
}

文本文件是一篇我想删除不是字母的所有内容(包括空白空间)的普通文章。摘录如下:“[16]自由软件基金会(FSF)成立于1985年,其本意是”自由“一词指的是发行的自由。”

共有1个答案

樊奇思
2023-03-14

就像我在评论中写的那样,更精确地说明出了什么问题...

我所尝试的

public class Regexp45348303 {

    public static void main(String[] args) {
        String[] tests = { "abc01", "01DEF34", "abc 01 def.", "a0101\n0202\n0303x" };
        for (String text : tests) {
            String cleanedText = text.toLowerCase().replaceAll("[^a-z]", ""); // A-Z removed too     
            System.out.println(text + " -> " + cleanedText);
        }
    }
}

输出为:

abc01 -> abc
01DEF34 -> def
abc 01 def. -> abcdef
a0101
0202
0303x -> ax
 类似资料:
  • 问题内容: 关于正则表达式有一个问题,试图回答我发现了另一个奇怪的事情。 这将打印YY。为什么?? 这会打印YXY 为什么勉强的正则表达式与“ X”字符不匹配?有,但为什么第一次不匹配三个符号和匹配的是两个,然后一个而不是三个?和第二个正则表达式仅匹配s而不匹配? 问题答案: 让我们依次考虑它们: 有两个匹配项: 在字符位置0处被匹配,并被替换为。 在字符位置1,空字符串被匹配,并被添加到输出中。

  • 我正在尝试使用来选择性地替换字符串的一部分。我正在PowerShell ISE中编写和调试该函数。奇怪的是,运行替换代码会导致一台机器输出一个字符串,该字符串是匹配评估器脚本块的内容,而另一台机器会正确替换文本。我不知道这是可能的,也不知道为什么会发生这种情况。 给出这段代码(借用另一个stackoverflow的回答): 在一台机器上执行它会导致输出(PowerShell版本): 但在另一个页面

  • 问题内容: 我正在尝试输入之间的内容,我的模式没有做正确的事,请帮忙。 下面是sudocode: 要求的输出: 之一 二 三 问题答案: 先行使用并在循环中使用,而不是: 看到它在线上工作:ideone 但是最好在这里使用split: 看到它在线上工作:ideone

  • 主要内容:正则表达式支持字符正则表达式(Regular Expression)又称正规表示法、常规表示法,在代码中常简写为 regex、regexp 或 RE,它是计算机科学的一个概念。 正则表达式是一个强大的字符串处理工具,可以对字符串进行查找、提取、分割、替换等操作,是一种可以用于模式匹配和替换的规范。一个正则表达式就是由普通的字符(如字符 a~z)以及特殊字符(元字符)组成的文字模式,它用以描述在查找文字主体时待匹配的

  • 问题内容: 您好,来自Java文档: UNIX_LINES 启用Unix行模式。 在这种模式下,只有行结束在行为的认可,和。 Unix行模式也可以通过嵌入式标志表达式启用 。 有人用其他词语来定义它的作用吗?我了解,“\ n”转义序列是只承认后,和。显然我被误解了。 问题答案: 至于它们如何专门用于正则表达式行为;,和取决于换行符的定义以起作用。 匹配除换行符以外的任何内容 可以匹配一行的开头 可

  • 问题内容: 我对多行字符串的replaceAll有问题: 以上适用于testWorks,但不适用于testIllegal !?为什么会这样,我该如何克服呢?我需要替换跨越多行的注释/ * … * /。 问题答案: 您需要使用标志来表示点应与换行符匹配。例如 或者使用例如在模式中指定标志