我是正常表达的新手。我有一个巨大的文字。在应用程序中,我需要4个字符的单词并删除其余的字符。该文本是西班牙文。到目前为止,我可以选择4个字符长度的单词,但我仍然需要删除其余的单词。
这是我的正则表达式
\s(\w{3,3}[a-zA-ZáéíóúäëïöüñÑ])\s
如何在asp.net vb中获得包含4个字母的所有单词?
答案 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)
您可以在此处查看正则表达式的结果:
答案 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