正则表达式:拆分X长度的单词

时间:2012-04-19 22:42:35

标签: asp.net regex vb.net

我是正常表达的新手。我有一个巨大的文字。在应用程序中,我需要4个字符的单词并删除其余的字符。该文本是西班牙文。到目前为止,我可以选择4个字符长度的单词,但我仍然需要删除其余的单词。

这是我的正则表达式

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

如何在asp.net vb中获得包含4个字母的所有单词?

3 个答案:

答案 0 :(得分:3)

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

<强>解释

切换/g用于重复搜索

\A是字符串的开头(不是行的开头)

\p{L}匹配 letter

类别中的单个代码点

\P{L}匹配不在字母

类别中的单个代码点

{n}指定具体的重复次数[ n 是数字]

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

|是逻辑 OR 运算符

(?<=)是后卫

(?=)是预见

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

()是反向引用分组

答案 1 :(得分:2)

在另一个答案中使用上面提供的字符类(不幸的是,\ w不匹配西班牙语字符)。

您可以将其用于匹配(它与反向匹配,基本上匹配 NOT 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

答案 2 :(得分:-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