2011-05-13 56 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,這取決於你的正則表達式引擎)取代