2016-11-24 87 views
0

我嘗試匹配來自特定字段的用戶的用戶名YouNow如何匹配包含在特殊字符中的用戶名

我摘錄了這個網站,我嘗試提取用戶名_You韓元

"\n\t\t\t\t\t\t14\n\t\t\t\t\t\t_You Won\n\t\t\t\t\t" 

這是我的正則表達式的嘗試:

(\d+)[\\n\\t]+([\W\w]+[^\\n\\t"$]) 

這工作得很好,首先我匹配號碼是級別,然後我匹配用戶名。但是,如果用戶名以tn結尾,則不會得到最後一個字母。所以用戶遊戲1N會得到削減到遊戲1

是否有人知道我怎樣才能正確地獲取用戶名?

發揮它: https://regex101.com/r/j8rufa/2

+2

注意regex101對待你的字符串作爲文字字符串,所以'\ N'是文字,不是換行符 - 所以使用該字符串的解決方案可能不適用於真正的文字應用程序,反之亦然。 –

+0

這不是一個問題,我確定它也可以,反之亦然,我只需要這個字符串的正確的正則表達式,但我認爲有很大的改進空間,因爲我是一個正則表達式的初學者。 – Black

回答

1

你可以在最後,而不是[^\\n\\t"$]使用正向前查找。

您的代碼將是:

(\d+)[\\nt]+([\W\w]+(?=\\n\\t)) 

演示:https://regex101.com/r/j8rufa/4

您還可以使用正回顧後,進一步提升了代碼,以確保整個名稱匹配。例如,如果名稱是一樣的東西t_You Won,將沒有任何問題的匹配:

(\d+)[\\nt]+(?<=\\t)([\W\w]+(?=\\n\\t)) 

演示:https://regex101.com/r/j8rufa/6

+0

非常感謝你,這個作品很棒:) ** YouWon ** – Black

+2

你可以縮短'[\\ n \\ t]'到'[\\ tn]' - 我希望你永遠不會面對用戶名開始t,例如TNT。如果用戶名後面有東西,將會有更多的問題。 –

+0

@EdwardBlack我的榮幸:) – Ibrahim