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

4

4 回答 4

1

以 Java 风格尝试这种模式:

(?<!\\S)[A-Za-z]+\\p{Punct}(?!\\S)

您可以用\\p{Punct}您选择的标点符号替换[.,:;]

于 2013-05-31T20:33:35.057 回答
0

如果您正在寻找以标点符号结尾的单词,您可以使用

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

\b是非单词边界

\p{P}匹配任何标点符号

(?=\s|$)将检查空格或字符串结尾

于 2013-05-31T20:05:10.677 回答
0

如果您只想在单词中找到点,那么您可以使用它

\b[.]\b

正则表达式图片

在 Debuggex 上实时编辑

或者,如果您只是在单词末尾寻找点,那么试试这个

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

正则表达式图片

在 Debuggex 上实时编辑

当然这将匹配.之后D.A.R.Y.L.

于 2013-05-31T20:42:34.417 回答
0

如果(且仅当)它后跟空格或字符串末尾时,您似乎(?)想要匹配/替换一个点。那是对的吗?

在这种情况下,假设您要将点更改为感叹号,

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:
于 2013-05-31T20:07:52.160 回答