2017-09-24 9 views
-1

それを行う方法に関するすべての質問はありませんので、すべての質問には独自の解決策がありますので、これをどのように機能させることが可能か理解できません。何をしようとしているのは、要件を満たしていない行を削除することです。すべての行には1語があります。 richTextBoxを使用しています。ライン毎先進的な正規表現コマンド

私の要件は次のとおりです。

  • 分3つの数字
  • 最大25文字
  • 少なくとも1番号
  • 少なくとも1つの文字

これらの要件のいずれかがある場合その行は削除されます。 私は(成功せず)をして遊んでいたコード:

richTextBox1.Text = Regex.Replace(richTextBox1.Text, "(a-z).*?(0-9)", ""); 
+2

「最小3数字」と「少なくとも1数字」 - 正確な最小数はどれくらいですか? 3つ1つ? –

+1

"それを行う方法についてのチュートリアルがないので、すべての質問には独自の独自の解決策があります" Whaaat?あなたは、正規表現のための[オンラインressource](https://regexone.com/)がないという意味ですか?チュートリアルはありませんが、正確な解決策を提供してくれることはありません。あなたのためにそれを書くツールもあります。 –

+1

[Regex for password]は、少なくとも8文字、少なくとも1つの数字、大文字と特殊文字を含む必要があります(https://stackoverflow.com/questions/19605150/regex-for-password-must)。最低8文字 - 少なくとも1桁) –

答えて

-1

私はあなたがこの作業のために正規表現を必要としないと思います。ただ、このような単純なLINQクエリを使用してRichTextBoxの各行を調べる:

// rtb is a RichTextBox; 
var sb = new StringBuilder(); 
foreach (var line in rtb.Lines) 
{ 
    var numbers = line.Count(char.IsDigit); 
    var letters = line.Count(char.IsLetter); 

    if (numbers < 1 || numbers > 3 || letters < 1 || letters > 25) 
     continue; 

    sb.AppendLine(line); 
} 
rtb.Text = sb.ToString(); 
-1

あなたは、たとえば、数量[-Z] {3,25}を使用することができます。

https://docs.microsoft.com/en-us/dotnet/standard/base-types/quantifiers-in-regular-expressions

私は3数字を参照していることを今、実感がありますが、アイデアを得ます。

+0

これはどのように地球儀がダウン投票になるのでしょうか? –

+0

おそらく彼はスペルミスを間違えたので、文法ナチの司会者:D – Wuzbee

+0

:-)私は今それを変更しました。それは価値があるとは思われませんでしたが、人々を怒らせるようであれば.... –

0

上記のとおり、「最小3数字」と「少なくとも1数字」は相反する要件です。私は最大3つの数字を意味すると思います。 もしそうなら(ただし、他の要件に調整することもできます)、正規表現をステップバイステップで構築しましょう。

  1. 手紙:あなたが考慮に非自明な手紙を取りたい場合は、例えば、[a-zA-z]またはより良い[\p{L}]ようなもので1を一致させることができますアクセント記号付きの文字
  2. 数字:[\d]と一致する
  3. 繰り返されるインスタンス:文字のm個とn個のインスタンスが必要な場合。あなただけの、インスタンスをカウントしたい先読みを使用している場合;:行は^$ペアの間に含まれ、それは句読点を含めることができ、スペースなど
  4. カウントインスタンス:番号、[\d]{m, n}
  5. 行を書きますあなたが確認する場合は、特定の一致を得ました(たとえば、正規表現という点で^[\d]{1,3}$を意味ライン、中の数字1〜3)、それ以上の文字oを(?=)
  6. ゼロで囲み:*を使用し、例えば「ゼロまたはそれ以上の数字」が[\d]*
  7. と異なる場合:異なる文字を探す場合など「少なくとも」.
  8. を選択します:あなたは、おそらく両方の前に、あなたが検索したものとは異なる他の文字をも持つことができることを意味番号から、[^\d]
  9. のように任意の文字、その前にキャレット(^)を使用します以降。1つ以上の数字以外の数字で始まらない数字がある場合は、[^\d]*[\d]と書いてください。あなたが1つ以上の非数字が先行および/または続くことがない場合があります番号を探している場合、[^\d]*[\d][^\d]*

を書くだからあなたの要求が

  • 間を含むすべての行を一致させることです1および3の番号(それらのそれぞれの前または次のものに関係なく): (?=(^([^\d]*[\d][^\d]*){1,3}$))
  • 1〜25文字(何でそれらのそれぞれの前または次の): (?=(^([^\p{L}]*[\p{L}][^\p{L}]*){1,25}$))

上記の2つの正規表現で数字と文字数をチェックしただけで、実際に何も選択しなかったので、実際には何も一致する必要があります。 任意の長さの行を一致させるには、\b.*\bと記述します。 thisthis one

は一緒にすべてを置く、あなたは

(?=(^([^\d]*[\d][^\d]*){1,3}$))(?=(^([^\p{L}]*[\p{L}][^\p{L}]*){1,25}$))^.*$ 

便利なリンクを取得します。試験here