2012-04-19 63 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