2013-05-31 1 views
-2

Я ломаю голову о следующей проблеме. Мне нужно совместить точку в слове при определенном условии.Найти слово, содержащее знаки препинания, но не в конце или слово

Пример:

D.A.R.Y.L. or se.ven or go/the will be untreated. 
Dr. Odissey. or look, or look: will be treated. 

я использовал раньше:

([A-Z]+[.\\-/]+)+([A-Z]+[.\\-/]?)* 

Это был частично работает, но он не будет различать для Dr. Odissey. и так далее.

+2

Я не уверен, что вы имеете в виду под 'необработанный' и 'лечение'. Не могли бы вы уточнить? – Jerry

+0

Как бы вы справились со следующим: 'qui.ck brown fox' или' прыгнул через d.og? 'Или' Эй, леди! Вы называете его доктором! –

ответ

0

Если вы ищете слова, возможно, заканчивающиеся с пунктуацией вы можете использовать

\b[a-zA-Z]+\p{P}?(?=\s|$) 

\b не является граница слова

\p{P} совпадает с любым символом пунктуации

(?=\s|$) бы проверить пространство или конец строки

0

Кажется (?), что вы хотите совместить/заменить do t if (и только если) за ним следуют пробелы или конец строки. Это верно?

В этом случае, если вы хотите изменить точки в exlamation знаков,

newString = oldString.replaceAll("(?<=^|\\s)(\\w+)\\.(?=\\s|$)", "$1!"); 

изменится

D.A.R.Y.L. or se.ven or go/the Dr. Odissey. or look, or look: 

в

D.A.R.Y.L. or se.ven or go/the Dr! Odissey! or look, or look: 
0

Попробуйте эту модель в стиле Java:

(?<=^|\\s)[A-Za-z]+\\p{Punct}(?=\\s|$) 

вы можете заменить \\p{Punct} с пунктуационных символов вы выбор [.,:;]

0

Если вы только ищете, чтобы найти точки внутри слова, то вы можете использовать этот

\b[.]\b 

Regular expression image

Edit live on Debuggex

Или, если вы ищете только точки в конце слов, тогда попробуйте это

\b[.](?:\s|$)|(?:^|\s)[.]\b 

Regular expression image

Edit live on Debuggex

Конечно, это будет соответствовать . после D.A.R.Y.L.