2014-08-28 6 views
1

У меня есть строка. Скажем:
String s = "This is my P.C.. My P.C. is the best.O.M.G!! Check this...";Java: заменить символ внутри соответствующего регулярного выражения

Я хочу, чтобы заменить все P.C. на PC слова и O.M.G к OMG. В общем, я хочу заменить все точки, которые находятся между одиночными буквами или одной буквой и пробелом или точкой. Я думаю, что согласование регулярное выражение для этого есть:

[^A-Za-z][A-Za-z]\\.[A-Za-z\\s\\.][^A-Za-z] 

Как я могу заменить только точку от этого и не все, что соответствует?

EDIT:

Ожидаемый результат:

"This is my PC. My PC is the best.OMG!! Check this..." 

EDIT2:

Основная задача состоит в том, чтобы удалить точки из сокращений и аббревиатур, которые могут быть записаны с или без точек. Так хорошее регулярное выражение также ценно

+0

Каков ваш ожидаемый выход? –

ответ

2

Вы можете рассмотреть возможность использования положительного предпросмотра утверждать, что за ним следует либо буква, точка . или пространство.

String s = "This is my P.C.. My P.C. is the best.O.M.G!! Check this..."; 
String r = s.replaceAll("([A-Z])\\.(?=[ A-Z.])", "$1"); 
System.out.println(r); //=> "This is my PC. My PC is the best.OMG!! Check this..." 
+0

Я думаю, что точка после «Z» нуждается в 2 обратных косых чертах. Что означает 1 доллар? – ApollonDigital

+0

'$ 1' backreferences результат матча из индекса группы 1. – hwnd

0

Используйте «lookarounds» для этого. Pattern ниже заменяет точки только если перед и с последующим капитала письма.

Вторая итерация рекомендуется, если вы придирчивы и хотите дезинфицировать .. на ., не влияя на подвеску ....

String s = "This is my P.C.. My P.C. is the best.O.M.G!! Check this..."; 
//        | preceded by capital letter 
//        |   | escaped dot 
//        |   | | followed by capital letter 
//        |   | |   | replace with empty String 
System.out.println(s.replaceAll("(?<=[A-Z])\\.(?=[A-Z])", "") 
    // second replacement: ".." folllowed by whitespace is "sanitized" with only 1 dot 
    .replaceAll("\\.{2}(?=\\s)", ".")); 

Выход

This is my PC. My PC. is the best.OMG!! Check this... 
0

Вы можете использовать ниже регулярное выражение, которое использует положительные назад ', чтобы удалить все точки, которые присутствуют только после того, как к прописным буквам,

System.out.println("This is my P.C.. My P.C. is the best.O.M.G!! Check this...".replaceAll("(?<=[A-Z])\\.", "")); 

Выход:

This is my PC. My PC is the best.OMG!! Check this... 
Смежные вопросы