繁体   English   中英

如何在Java中使用正则表达式删除某些字符

[英]How to use regular expressions in java to remove certain characters

普遍的问题是:如何解析字符串并消除标点符号并替换其中的一部分?

我正在尝试修改一些输入文本。 情况是我有一个普通的文本文件,带有标点符号,我想删除所有这些文件。 如果符号是。 ...我想用“”字符串替换它。

我从没使用过正则表达式,因此尝试使用字符串比较,但是显然这并不适合所有情况。 如果有两个标点符号,我会遇到麻烦; 就像在“第二天(4ht)”中输入的一样)。 togheter。

例如,从给定的输入中,我期望以下内容:

Input :  [...] at it!" This speech caused
Excpected output : at it <s> this speech caused

我代码中的每个单词都被添加到ArrayList中,因为以后需要使用它。

非常感谢!

FileInputStream fileInputStream = new FileInputStream("TEXT.txt");
InputStreamReader inputStreamReader = new InputStreamReader(
        fileInputStream, "UTF-8");
BufferedReader bf = new BufferedReader(inputStreamReader);

words.add("<s>");
String s;
while ((s = bf.readLine()) != null) {
    String[] var = s.split(" ");

    for (int i = 0; i < var.length; i++) {
        if (var[i].endsWith(",") || var[i].endsWith(")")
                || var[i].endsWith("(") || var[i].endsWith(":") 
                ||  var[i].endsWith(";") ||var[i].endsWith("'")) {
            var[i] = var[i].substring(0, var[i].length() - 1);
            words.add(var[i].toLowerCase());
        } else if ( var[i].startsWith("'")) {
            var[i] = var[i].substring(1, var[i].length() );
            words.add(var[i].toLowerCase());
        } else if (var[i].endsWith(".") || var[i].endsWith("...")
                || var[i].endsWith("!") || var[i].endsWith("?")) {
            var[i] = var[i].substring(0, var[i].length() - 1);
            words.add(var[i].toLowerCase());
            words.add("<s>");
        } else {
            words.add(var[i].toLowerCase()); // 
            // System.out.println("\n neu eingelesenes Wort: " + var[i]);
        }}
}

您的代码显示有很多情况,但是假设您只想替换“。”,“?”或“!”的所有实例。 字符。

定位这些字符的正则表达式为[.!?] ,方括号表示“字符类”,这意味着它与方括号内的所有那些字符匹配,但不是全部。 这使我们可以指定多个字符进行匹配。

假设您已将整个文件加载到字符串名称“ myText”中。

myText.replaceAll(new Regex("[.!?]", "");

而已! 现在,如果您有条件,只能将它们从某些复杂的地方移走。 如果您需要有关条件的信息,请编辑您的帖子以包括所有不应发生的特殊情况。

注意:由于您显然没有将整个文件加载到单个字符串中,因此可以在使用缓冲区时继续在读取的字符串上调用此方法。

首先使用正则表达式过滤掉标点符号,然后再按空格将其拆分并将结果添加到列表中:

FileInputStream fileInputStream = new FileInputStream("TEXT.txt");
InputStreamReader inputStreamReader = new InputStreamReader(
        fileInputStream, "UTF-8");
BufferedReader bf = new BufferedReader(inputStreamReader);
words.add("<s>");
String s;
while ((s = bf.readLine()) != null) {
    s = s.replaceAll("[^a-zA-Z ]", ""); // replace all non-word/non-space characters with an empty string
    String[] var = s.split(" ");
    words.addAll(var);
}

你必须用

String.replaceAll(<your RegEx>, "");

要构建您的RegEx(并了解它们的工作原理),可以使用https://regexr.com

注意:您需要用\\\\替换输出中的所有\\,以符合Java的转义规则。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM