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