Java: заменить символ внутри соответствующего регулярного выражения

1

У меня есть строка. Скажем:
String s = "This is my PC. My PC is the best.OMG!! Check this...";

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

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

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

РЕДАКТИРОВАТЬ:

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

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

EDIT2:

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

  • 0
    Каков ваш ожидаемый результат?
Теги:
pattern-matching
replace

4 ответа

2
Лучший ответ

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

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 доллар?
  • 0
    $1 ссылается на результат совпадения из группового индекса 1.
0

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

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...
0
(?<=[A-Z])(\.)(?=[A-Z]|\.|\s)

Вы можете попробовать это.

См. Демонстрацию.

http://regex101.com/r/lK9iD2/2

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...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню