Java 去除字符串顶部和结尾所有标点的正则表达式

Java 去除字符串顶部和结尾所有标点的正则表达式,java,regex,string,punctuation,Java,Regex,String,Punctuation,我试图找到一个正则表达式,它可以去掉字符串顶部和结尾的所有标点(如果有一个或多个标点)。 我现在使用的正则表达式如下所示:(word是我要转换的字符串) 然而,我仍然收到一些奇怪的案例。例如,'Amen'转到'Amen','tis转到'tis。有人能帮我修改一下吗?'Amen'将转到Amen和'tis到tis。提前谢谢 替换以下模式: ^\p{P}+|\p{P}+$ 使用空字符串 \p{p}表示任何标点符号。正则表达式的第一部分将在开头删除标点符号,第二部分将在结尾删除标点符号。在Java中

我试图找到一个正则表达式,它可以去掉字符串顶部和结尾的所有标点(如果有一个或多个标点)。 我现在使用的正则表达式如下所示:(word是我要转换的字符串)


然而,我仍然收到一些奇怪的案例。例如,
'Amen'
转到
'Amen'
'tis
转到
'tis
。有人能帮我修改一下吗?
'Amen'
将转到
Amen
'tis
tis
。提前谢谢

替换以下模式:

^\p{P}+|\p{P}+$
使用空字符串

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

在Java中,您可以使用:

\\p{Punct}
识别标点符号

要从开始或结束删除标点符号,请使用以下命令:

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

我无法重现
'tis
变成
'tis
的问题,但
'Amen'
的问题是您的正则表达式不接受大写字符,因为
[a-z]
只能接受小写字符。您可以通过在字符类中添加
A-Z
或使用
(?i)
标志使正则表达式不区分大小写来更改它

所以试试吧

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

您还可以将策略更改为仅删除字符串开头或结尾的标点符号。那样的话,你可以用

replaceAll("^\\p{Punct}+|\\p{Punct}+$","");
在哪里

  • ^
    表示字符串的开头
  • $
    表示字符串的结尾
  • \\p{Punct}
    是表示标点字符的字符类(其中一个是
    !“#$%&'()*+,-./:;?@[]^{code}
    字符),但如果需要,您可以使用自己的
    ['?:!;]
replaceAll("(?i)['?:!.,;]*([a-z]+)['?:!.,;]*", "$1")
replaceAll("^\\p{Punct}+|\\p{Punct}+$","");