0

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

这是我的正则表达式

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

我怎样才能在asp.net vb中获得所有带有4个字母的单词?

4

3 回答 3

3

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

解释:

开关/g用于重复搜索

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

\p{L}匹配类别字母中的单个代码点

\P{L}匹配不在类别字母中的单个代码点

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

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

|是逻辑运算符

(?<=)向后看

(?=)是超前的

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

()是反向引用分组

于 2012-04-19T22:58:34.570 回答
2

在另一个答案中使用上面提供的字符类(不幸的是,\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

于 2012-04-19T23:28:13.580 回答
-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

于 2012-04-19T22:46:02.803 回答