2011-11-04 29 views
0

確定,即時通訊格式佔的FTP ... 賬戶被安排如下:正則表達式一個字符之前找到一個字,一個空間後,但如果一個「」空間之前談到

bob, joe:###### 

但是,有些賬戶名稱必須照顧他們中間有大寫字母/中間名,就像這樣:

bob, joe r:###### 
bob, joe ryan:###### 

我已經試過[^,] *(:+),但它拿起一個姓如果沒有中間名/初始(它也摘了:)

我只需要獲取中間名/首字母。謝謝!

+0

哪個正則表達式引擎?什麼是期望的輸出?把這些東西寫下來比寫在問題的標題上更好。 – FailedDev

+0

什麼語言,以及爲什麼要使用正則表達式?不會分裂:更有意義? – geoffspear

回答

1

您正在尋找一種負面預測,並非所有Regex語言都支持。在Perl中,你的正則表達式應該是這樣的:

/(?!,) (.*?)(:.+)/ 

perl -e 'print "$1 -- $2" if "bob, joe:######" =~ /(?!,) (.*?)(:.+)/;' 
joe -- :###### 

perl -e 'print "$1 -- $2" if "bob, joe r:######" =~ /(?!,) (.*?)(:.+)/;' 
joe r -- :###### 
+0

是的,即時通訊不使用編程語言....我做了一個C++程序,格式化帳戶列表:passowrd的到我們正在使用的ftp客戶端的XML ...我可以將正則表達式添加到C++項目,但說實話 - 我從來沒有在C++項目中使用正則表達式,因爲我通常做遊戲開發類型的東西。即時通訊使用可能不是最好的工具...所以即時通訊打開如此的建議..也,你不介意,你能解釋上述正則表達式是如何工作的?我嘗試使用維基百科,並找出它......但我不太好,正則表達式(顯然):p – motsu35

+0

正則表達式的工作原理是首先尋找一個空格*不*然後是一個','('(?!,)' )。一旦找到空格,它會查找「:」字符,然後獲取所有字符。 –

0

不知道如果我的理解100%,但我猜你想找到在第二個例子中的「r」和「瑞恩」。在這種情況下,嘗試

[^:]*\s+(\w+):[^:]* 

[^:] \ S +匹配之前的一切 :[^:]匹配一切後

的一個問題是它會拿起名字,如果沒有中間不知道這是你不想在我修改了它需要別的姓氏這種情況下,姓氏問題

注意到有不匹配:

[^:]*,\s+\w+\s+(\w+):[^:]* 
0

我不知道我明白你在問什麼。如果您要求匹配中間名和初始名,則可以在python中使用以下正則表達式:\w+\s+\w

上的以下文件:

tom, smith:###### 
bob, joe k:###### 
nick, ryan stevens:###### 

你會得到以下輸出:

joe k 
ryan s 

編輯:因爲一些名字中都有連字符。我會用以下的正則表達式:[a-zA-Z\-]+\s+\w

相關問題