2012-04-19 41 views
0

我是新來正規expresions。我有一個巨大的文字。在應用程序中,我需要4個字符的單詞,並刪除其餘的單詞。文本是西班牙文。到目前爲止,我可以選擇4個字符長度的單詞,但我仍然需要刪除其餘的。正則表達式:拆分X長度單詞

這是我的正則表達式

\s(\w{3,3}[a-zA-ZáéíóúäëïöüñÑ])\s 

我怎樣才能在asp.net VB 4個字母的所有單詞?

回答

2

使用炭在另一個答案中提供了上面提供的acter類(\ w不幸地與西班牙文字符不匹配)。

您可以用這個匹配(它的反向匹配,基本匹配的一切,是不是 4個字符的話,那麼你可以用「替換」,只留下4個字符的話):

/(^|(?<=(?<=\W)[a-zA-ZáéíóúäëïöüñÑ]{4,4}(?=\W)))(.*?)((?=(?<=\W)[a-zA-ZáéíóúäëïöüñÑ]{4,4}(?=\W))|$)/gis 

近似的代碼在VB(未測試):

Dim input As String = "This is your text" 
    Dim pattern As String = "/(^|(?<=(?<=\W)[a-zA-ZáéíóúäëïöüñÑ]{4,4}(?=\W)))(.*?)((?=(?<=\W)[a-zA-ZáéíóúäëïöüñÑ]{4,4}(?=\W))|$)/gis" 
    Dim replacement As String = " " 
    Dim rgx As New Regex(pattern) 
    Dim result As String = rgx.Replace(input, replacement) 

    Console.WriteLine("Original String: {0}", input) 
    Console.WriteLine("Replacement String: {0}", result)        

你可以看到在行動這裏正則表達式的結果:

http://regexr.com?30n29

+0

這是工作好。格拉西亞斯 – chepe263 2012-04-20 17:59:52

-2
\[^a-zA-ZáéíóúäëïöüñÑ][a-zA-ZáéíóúäëïöüñÑ]{4}[^a-zA-ZáéíóúäëïöüñÑ]\g 

翻譯: 非字母,隨後4個字母,接着通過非信。顯示的'g'將不止一次地在全球範圍內匹配。

看看這個鏈接,瞭解更多信息的循環您的比賽: http://osherove.com/blog/2003/5/12/practical-parsing-using-groups-in-regular-expressions.html

+0

**如果4個字母的單詞在字符串中非常首位或非常最後一個,在單詞之前/之後沒有非字母 – 2012-04-19 23:18:30

3

/(?:\A|(?<=\P{L}))(\p{L}{4})(?:(?=\P{L})|\z)/g

說明:

開關/g被用於重複搜索

\A是字符串的開頭(不是行首)

\p{L}單個碼點的類別相匹配

\P{L}匹配單個碼點不是在類別

{n}指定的重複的一個特定量[Ñ是數]

\z是字符串的結尾(不是行尾)

|是邏輯OR操作者

(?<=)是回顧後

(?=)是先行

(?:)是非反向引用分組

()是反向引用分組

+0

(1)VB不支持正則表達式文本; (二)有沒有類似'/ g'標誌 - 你只需要調用(例如)'匹配()''而不是匹配()'的; (3)'\ p {L}'匹配大寫和小寫字母了,所以你不需要'/ i'標誌(或同等學歷)。 – 2012-04-20 12:06:46

+0

它甚至沒有在這裏工作http://gskinner.com/RegExr/ – chepe263 2012-04-20 17:47:59

+0

@ chepe263 - gskinner.com不支持'\ p {L}'和'\ p {L}' – 2012-04-20 17:49:31