2011-05-13 127 views
1

我解析了一些日志,在某些情况下,用户名显示为FirstName.LastName,在其他情况下显示为FLastName。我只是想知道是否可以将两个名称解析为FLastName。 例如Joe.Doe和JDoe应该都是JDoe。 谢谢。正则表达式解析名和

回答

0

不知道你正在使用的正则表达式的平台,但是这将工作在sed:

sed 's/\([a-z[A-Z]\).*\.\(.*\)$/\1\2/' 

对于字符串"FirstName.LastNameFLastName它给输出:

FLastName 
+0

不能匹配JDOE因为'.'不是可选的。 – stema 2011-05-13 18:37:47

+0

正确,那是有目的的,如果你在上面运行'JDoe'将保持'JDoe',这就是你想要的。 – anubhava 2011-05-13 18:45:54

+0

啊,好吧,如果你这样看,那你就是对的。 – stema 2011-05-13 18:48:05

1

这将做到这一点:

(.)(?:[^\.]*\.)(.+)$ 

基本上它抓住第一个字符,然后允许多个charact随后一个点,然后抓住其余的。替换字符串将是:

$1$2 

但这取决于您正在使用的正则表达式工具。

Try it on RegExr(谢谢stema,我不知道这个网站)。

+0

它不能匹配JDoe,因为'.'不是可选的。 – stema 2011-05-13 18:38:26

+0

这不是真的,最后一部分'(。+)'会抓住JDoe的情况。 – 2011-05-13 18:41:26

+0

你的正则表达式不匹配JDoe,但因为它不匹配,所以没有东西会被替换,一切都很好。 @anubhava打开我的眼睛(谢谢;-))。 – stema 2011-05-13 18:54:40

0

我的解决办法,(但其他两个也能发挥作用)

^([a-zA-Z])(?:.*\.)?(.*)$ 

See online here on Regexr

它的第一个字母相匹配,那么下面的部分,直到点是可选的。最后匹配字符串直到结尾。第一个字母是在第1组和姓氏是第2组

所以用$ 1 $ 2(或\ 1 \ 2,这取决于你的正则表达式引擎)取代