【问题标题】:Java regex to remove specific punctuationJava regex 删除特定标点符号
【发布时间】:2014-07-14 16:59:41
【问题描述】:

我正在使用 java 格式化大量纯文本文件,我需要删除除撇号之外的所有标点符号。当我最初为replaceAll 语句设置正则表达式时,它可以摆脱我所知道的所有内容,但现在我发现了一个无法使用的特定文件/标点符号集。

    holdMe = holdMe.replaceAll("[,_\"-.!?:;)(}{]", " ");

我知道我正在打这个声明,因为所有其他标点符号都已清除,没有句号、逗号等。我已经尝试转义 () 和 {} 字符,但它仍然没有被这些字符替换。我一直在尝试使用 Oracle 文档自学正则表达式,但我似乎无法理解为什么这不起作用。

【问题讨论】:

  • 您将不得不展示一些输入和输出示例。
  • 这个问题不允许我包含我遇到问题的文本,它被识别为代码,所以这里是问题文本。输出与输入相同。 ** 我们为他们做假释的黑鬼(我的街角 duns 把玻璃放在他们的金子里){我们总是会这样做}即使我被锁定 {我们仍然会这样做}(和旧枪街区){我们仍然会这样做}对附近的警察{我们仍然会这样做}{我们仍然会这样做,我们总是会这样做}**

标签: java regex formatting replaceall


【解决方案1】:

这个正则表达式将标记除撇号以外的所有标点符号

[\p{P}&&[^\u0027]]

正则表达式的java字符串:

"[\\p{P}&&[^\u0027]]"

【讨论】:

  • 这个答案是完美的,只是问题要求排除撇号,即\x27,而不是双引号字符或 NUL。
  • 你可以更进一步,直接在正则表达式中使用'字符,这样应该更容易理解。
  • 这就是答案!
【解决方案2】:

与其具体指定要删除的每个字符,不如反其道而行之,并说明要允许的字符,并在其前面加上 not?

holdMe = holdMe.replaceAll("[^a-zA-Z0-9'\\s]+"," ");

以上内容将用" " 替换除空格、字母数字字符和撇号以外的所有内容。

【讨论】:

  • 不得不添加另一个 \ 来转义 \s,但它仍然不能替换此 sn-p 中的 {} 和 () 字符。
【解决方案3】:

检查一下:

public static void main(String[] args) {
        /* use \\ (double) before { } [ ] */
        String m = "this:{[]}/; is a test".replaceAll("[\\[\\]\\{\\}\\/,_\"-.!?:;)(]", " ");
        System.out.println(m);
    }

输出:

this        is a test

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多