找到包含标点符号的单词,但不包含在结尾或单词中

时间:2013-05-31 19:49:02

标签: regex find period

我对跟随问题感到不安。我需要在某些条件下匹配单词中的点。

示例:

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 个答案:

答案 0 :(得分:1)

以Java风格尝试此模式:

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

您可以使用您选择的标点字符\\p{Punct}

替换[.,:;]

答案 1 :(得分:0)

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

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

\b是一个非字边界

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

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

答案 2 :(得分: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:

答案 3 :(得分: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.相匹配