使用正则表达式删除单个字符后跟O.

时间:2015-07-15 06:54:02

标签: java regex

如果中间名由组成,我需要匹配 以下字符“JO”,O将被删除,留下“J”。我的正则表达式是standardName.replaceAll("(?<=[A-Z])[O]*", "")。这是有效的,但它也取代了其他字符串。例如,如果我通过SOO BOO我只得到S B只有当我得到一个单字符后跟O如上所述O应该被替换,否则不是。有什么建议吗?

3 个答案:

答案 0 :(得分:3)

您可以在两边使用单词边界:

standardName = standardName.replaceAll("(?<=\\b[A-Z])O\\b", "");

RegEx Demo

答案 1 :(得分:2)

standardName.replaceAll("(?<=\\s[A-Z]|^[A-Z])[A-Z])[O]\\b", "")

这应该适合你。\b是一个单词边界,在O之后不允许使用字母。

standardName.replaceAll("(?<=\\s[A-Z]|^[A-Z])O(?=\\s|$)", "")

答案 2 :(得分:1)

你可以试试这个,

standardName.replaceAll("(?<=\\s[A-Z])O(?!\\S)", "");

在负向前瞻声明后,O后面不能跟一个非空格字符。

standardName.replaceAll("\\s([A-Z])O\\s", "$1");