gpt4 book ai didi

java - 正则表达式删除所有标点符号但保留小数点和带连字符的单词

转载 作者:行者123 更新时间:2023-11-30 10:31:45 30 4
gpt4 key购买 nike

我正在尝试制作一个可以删除所有标点符号和空格但保留小数点和连字符的正则表达式。到目前为止,我有:

String doc = "THE SOCIAL IMPACT OF THE CHERNOBYL DISASTER BY DAVID R. MARPLES (ST. MARTIN'S PRESS: $35, CLOTH; $14.95, PAPER; 316 PP., ILLUSTRATED; 0-312-02432-0)";
String doc = doc.replaceAll("[^a-zA-Z_0-9-]+", " ").toLowerCase();

它删除所有点,包括小数点。

如何区分圆点周围是字符还是数字?

预期输出:

 the social impact of the chernobyl disaster by david r marples st martin s press 35 cloth 14.95 paper 316 pp illustrated 0-312-02432-0

最佳答案

你可以试试这个:

[^a-zA-Z0-9_.-]|(?<!\d)\.(?!\d)|(?<!\w)-(?!\w)

Update:

为连字符添加条件 (?<!\w)-(?!\w)

并替换为 " "

解释:

  1. [^a-zA-Z0-9_.-]在您的初始正则表达式中包含点以使其最初不匹配。
  2. (?<!\d)\.(?!\d)先到这里(?<!\d)表示如果点前面没有数和第二个 (?!\d)表示后面没有数字然后匹配点进行替换

Regex Demo

Java Demo示例来源:

final String regex = "[^a-zA-Z0-9_.-]|(?<!\\d)\\.(?!\\d)|(?<!\\w)-(?!\\w)";
final String string = "THE - . SOCIAL IMPACT OF THE CHERNOBYL DISASTER BY DAVID R. MARPLES "
+ "(ST. MARTIN'S PRESS: $35, CLOTH; $14.95, PAPER; 316 PP., ILLUSTRATED; 0-312-02432-0)\n\n\n";

String result=string.replaceAll(regex," ");
System.out.println(result);

关于java - 正则表达式删除所有标点符号但保留小数点和带连字符的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43038139/

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