我对以下问题感到头疼。我需要在特定条件下匹配单词中的点。
例子:
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.
等等。
以 Java 风格尝试这种模式:
(?<!\\S)[A-Za-z]+\\p{Punct}(?!\\S)
您可以用\\p{Punct}
您选择的标点符号替换[.,:;]
如果您正在寻找以标点符号结尾的单词,您可以使用
\b[a-zA-Z]+\p{P}?(?=\s|$)
\b
是非单词边界
\p{P}
匹配任何标点符号
(?=\s|$)
将检查空格或字符串结尾
如果您只想在单词中找到点,那么您可以使用它
\b[.]\b
或者,如果您只是在单词末尾寻找点,那么试试这个
\b[.](?:\s|$)|(?:^|\s)[.]\b
当然这将匹配.
之后D.A.R.Y.L.
如果(且仅当)它后跟空格或字符串末尾时,您似乎(?)想要匹配/替换一个点。那是对的吗?
在这种情况下,假设您要将点更改为感叹号,
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: