我是常规表达式的新手。我有一个巨大的文本。在应用程序中,我需要 4 个字符的单词并删除其余单词。文本是西班牙语。到目前为止,我可以选择 4 个字符长度的单词,但我仍然需要删除其余的。
这是我的正则表达式
\s(\w{3,3}[a-zA-ZáéíóúäëïöüñÑ])\s
我怎样才能在asp.net vb中获得所有带有4个字母的单词?
/(?:\A|(?<=\P{L}))(\p{L}{4})(?:(?=\P{L})|\z)/g
解释:
开关/g
用于重复搜索
\A
是字符串的开头(不是行首)
\p{L}
匹配类别字母中的单个代码点
\P{L}
匹配不在类别字母中的单个代码点
{n}
指定特定的重复次数 [ n是数字]
\z
是字符串的结尾(不是行尾)
|
是逻辑或运算符
(?<=)
向后看
(?=)
是超前的
(?:)
是非反向引用分组
()
是反向引用分组
在另一个答案中使用上面提供的字符类(不幸的是,\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)
您可以在此处查看正则表达式的运行结果:
\[^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