私は定期的な表現に不慣れです。巨大なテキストがあります。アプリケーションでは、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
文字列の終わりです(行の終わりではありません)
|
論理OR演算子です
(?<=)
後ろ向きです
(?=)
先読みです
(?:)
非後方参照グループ化です
()
後方参照グループ化です
別の回答で上記の文字クラスを使用する(残念ながら、\ 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