Java 去除字符串顶部和结尾所有标点的正则表达式
我试图找到一个正则表达式,它可以去掉字符串顶部和结尾的所有标点(如果有一个或多个标点)。 我现在使用的正则表达式如下所示:(word是我要转换的字符串)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中
然而,我仍然收到一些奇怪的案例。例如,
'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}+$","");