java中如何使用正则表达式删除某些字符
How to use regular expressions in java to remove certain characters
一般问题是:如何解析一个字符串并消除标点符号并替换其中的一些?
我正在尝试修改一些输入文本。情况是我有一个普通的文本文件,带有标点符号,我想将它们全部删除。如果 Symbol 是一个 . ! ? ...我想用“”字符串替换它。
我从未使用过正则表达式,所以我尝试了字符串比较,但显然这对所有情况都不够。如果有两个标点符号我就麻烦了;就像在文本 "the second Day (the 4ht)." 中,当我有 ) 时。在一起。
例如,根据给定的输入,我期望以下内容:
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]);
}}
}
您的代码显示了很多条件,但我们假设您只想替换“.”、“?”或“!”的所有实例。字符。
定位这些字符的正则表达式是 [.!?]
括号的意思是 "character class",这意味着它匹配括号内的任何这些字符,但 不是 他们都。这允许我们指定多个字符进行匹配。
假设您已将整个文件加载到字符串名称 "myText"。
myText.replaceAll(new Regex("[.!?]", "");
就是这样!现在,如果您有条件只能将它们从某些使事情复杂化的地方移除。如果您需要有关条件的信息,请编辑您的 post 以包括所有不应发生这种情况的特殊情况。
注意: 由于您显然没有将整个文件加载到单个字符串中,因此您可以在使用时继续对正在读取的字符串调用此方法缓冲区。
首先使用正则表达式过滤掉标点符号,然后用 space 拆分并将结果添加到您的列表中:
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 的转义规则。
一般问题是:如何解析一个字符串并消除标点符号并替换其中的一些?
我正在尝试修改一些输入文本。情况是我有一个普通的文本文件,带有标点符号,我想将它们全部删除。如果 Symbol 是一个 . ! ? ...我想用“”字符串替换它。
我从未使用过正则表达式,所以我尝试了字符串比较,但显然这对所有情况都不够。如果有两个标点符号我就麻烦了;就像在文本 "the second Day (the 4ht)." 中,当我有 ) 时。在一起。
例如,根据给定的输入,我期望以下内容:
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]);
}}
}
您的代码显示了很多条件,但我们假设您只想替换“.”、“?”或“!”的所有实例。字符。
定位这些字符的正则表达式是 [.!?]
括号的意思是 "character class",这意味着它匹配括号内的任何这些字符,但 不是 他们都。这允许我们指定多个字符进行匹配。
假设您已将整个文件加载到字符串名称 "myText"。
myText.replaceAll(new Regex("[.!?]", "");
就是这样!现在,如果您有条件只能将它们从某些使事情复杂化的地方移除。如果您需要有关条件的信息,请编辑您的 post 以包括所有不应发生这种情况的特殊情况。
注意: 由于您显然没有将整个文件加载到单个字符串中,因此您可以在使用时继续对正在读取的字符串调用此方法缓冲区。
首先使用正则表达式过滤掉标点符号,然后用 space 拆分并将结果添加到您的列表中:
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 的转义规则。