正则表达式摆脱字符串顶部和末尾的所有标点符号

时间:2014-10-30 21:01:54

标签: java regex string punctuation

我正在尝试提出一个正则表达式,它可以消除字符串顶部和末尾的所有标点符号(如果有一个或多个)。 我现在使用的正则表达式如下所示:(单词是我要转换的字符串)

    word = word.replaceAll("['?:!.,;]*([a-z]+)['?:!.,;]*", "$1").toLowerCase();

但是,我仍然会遇到一些奇怪的情况。例如,'Amen'转到'amen'''tis转到'tis。任何人都可以帮我修改它,以便'Amen'转到amen''tis转到tis。提前谢谢!

3 个答案:

答案 0 :(得分:2)

替换以下模式:

^\p{P}+|\p{P}+$

使用空字符串。

Demo

\p{P}表示任何标点字符。正则表达式的第一部分将在开始时删除标点符号,第二部分将在结束时删除标点符号。

答案 1 :(得分:1)

在Java中,您可以使用:

\\p{Punct}

识别标点字符。

要从开头或结尾删除标点字符,请使用以下命令:

String word = word.replaceAll("^\\p{Punct}+|\\p{Punct}+$", "");

答案 2 :(得分:0)

我无法通过''tis成为'tis来重现问题,但'Amen'的问题在于您的正则表达式不接受大写字符,因为{{1}只能接受小写字符。您可以通过将[a-z]添加到角色类或通过使用A-Z标记使正则表达式不区分大小来更改它。

所以尝试一下

(?i)

replaceAll("['?:!.,;]*([a-zA-Z]+)['?:!.,;]*", "$1")

您还可以将策略更改为仅删除字符串开头或字符串末尾的标点符号。在这种情况下,你可以使用

replaceAll("(?i)['?:!.,;]*([a-z]+)['?:!.,;]*", "$1")

其中

  • replaceAll("^\\p{Punct}+|\\p{Punct}+$",""); 表示字符串的开头
  • ^表示字符串的结尾
  • $是表示标点字符(\\p{Punct}个字符之一)的字符类,但如果需要,可以使用自己的!"#$%&'()*+,-./:;<=>?@[]^_`{|}~