为Initials找到正确的RegEx模式

时间:2014-08-04 22:29:04

标签: regex vb.net visual-studio-2012

我希望RegEx可以解决这个问题,但我无法弄清楚写模式。

我试图在空格之后或者在字符串末尾附加一个句点到大写字母的末尾。

例如:

FullName = "John A A Smith C.P.A." to "John A. A. Smith C.P.A."

Prefix = "Mr." to "Mr." (unchanged)
FirstName = "John A" to "John A."
MiddleName = "A" to "A."
LastName = "Smith" to "Smith" (unchanged)
Suffix = "C.P.A." To "C.P.A" (unchanged)

这是我试过的正则表达式模式的最后一个变种:“\ b [A-Z] [^。] \ b” 这是替换模式:“$&。”

问题是“C.P.A.”变成“C..P..A ..”

无论如何都要避免这种情况吗?

感谢您阅读我的问题!

1 个答案:

答案 0 :(得分:1)

尝试使用以下表达式之一

([A-Z](?=\s)|[A-Z][^\.]$)
([A-Z](?=\s)|[A-Z][^\.]$|\b[A-Z]\b$)
(\b[A-Z]\b)(?!\.)

替换

$1.

JavaScript中的用法

'John A A Smith C.P.A'.replace(/([A-Z](?=\s)|[A-Z][^\.]$)/g, "$1.");
'John A A Smith C.P.A.'.replace(/([A-Z](?=\s)|[A-Z][^\.]$)/g, "$1.");

输出:

John A. A. Smith C.P.A.
John A. A. Smith C.P.A.

Demo 1 | Demo 2 | Demo 3