我正在尝试提出一个正则表达式,它可以消除字符串顶部和末尾的所有标点符号(如果有一个或多个)。 我现在使用的正则表达式如下所示:(单词是我要转换的字符串)
word = word.replaceAll("['?:!.,;]*([a-z]+)['?:!.,;]*", "$1").toLowerCase();
但是,我仍然会遇到一些奇怪的情况。例如,'Amen'
转到'amen'
,''tis
转到'tis
。任何人都可以帮我修改它,以便'Amen'
转到amen
和''tis
转到tis
。提前谢谢!
答案 0 :(得分:2)
答案 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}
个字符之一)的字符类,但如果需要,可以使用自己的!"#$%&'()*+,-./:;<=>?@[]^_`{|}~
类