gpt4 book ai didi

java - 使用正则表达式清理文本

转载 作者:行者123 更新时间:2023-12-01 11:57:04 27 4
gpt4 key购买 nike

我正在阅读一个文本文件,我想找到文本的正确标记。但是我在句子末尾的点有问题。我的代码是以下代码,查询意味着输入字符串:

    query = query.replaceAll("[^\\p{L}\\s0-9-_/.]", "");
query = query.replaceAll("\t", " ");
query = query.replaceAll("\r", " ");
query = query.replaceAll("\n", " ");
StringTokenizer words = new StringTokenizer(query, " ");
while(tokens.hasMoreTokens()){
String str=tokens.nextToken();
String regex = "\\d+.\\d+";
if(!str.matches(regex)) *<- second problem*
System.out.println(str);

例如;输入文本是以下行

THE WORLD OF UNIQUE VENDING CARTS. fy_lkaris@yahoo.com  www.ubc_lib?9867.come/homepage 876454 9890-9999-9099.

我想要以下字符串作为输出

THE WORLD OF UNIQUE VENDING CARTS
fy_lkaris@yahoo.com
www.ubc_lib?9867.come/homepage
9890-9999-9099

但是我的实际输出在第一行和最后一行输出的末尾有点。我无法删除点 (.),因为它从每个地方删除。

THE
WORLD
OF
UNIQUE
VENDING
CARTS.ff_lashkariyahoo.com *<-problem*
www.unb_lib9867.come/homepage
9890-9999-9099. *<-problem*

此外,我只想删除像 4,764,90.900 这样的数字,而不是 76-098-098,而且我找不到比使用 ma​​tch 函数更好的方法。有没有办法解决这个问题。

你能帮我一下吗?

最佳答案

问题是在字符类中间存在未转义的连字符。仅当连字符位于字符类中的开始或结束位置时,才可以对其进行转义。

使用这个:

query = query.replaceAll("[^\\p{L}\\s0-9_/.-]", "");

当连字符出现在中间时,它充当范围。在您的情况下,它创建数字 9 (ASCII: 57) 和下划线 (ASCII: 95) 之间的范围。

关于java - 使用正则表达式清理文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28370000/

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