次のパターンに一致する場合にのみ、Display name
大きなテキスト ファイルを解析して抽出する必要があります。area code
- 行は次で始まります
display name
(単語数は任意ですが、数字や特殊文字を含めることはできません) - その後に 6 桁の数字が続きます (スペースを含めることができます)
- 続いて
#text
タグ
入力ファイル
John doe 123 456 #text some text
Test 123456 #text
Test$test 123456 #text
Test123 345678 #text
Test 123 #test
Test 123456 #test1
Test 123g45 #test
入力と期待される出力
John doe 123 456 #text some text
Display name: John doe
Area code: 123 456
Test 123456 #text
Display name: Test
Area code: 123456
Test$test 123456 #text
Invalid, display name contains special character
Test123 345678 #text
Invalid, display name contains digits
Test 123 #test
Invalid, area code contains only 3 digits
Test 123456 #test1
Invalid, contains invalid tag
Test 123g45 #test
Invalid, area code contains letters
等
テキスト ファイルを開いて 1 行ずつ読み取る方法は知っていますが、正規表現の記述に問題があります。
これは私が試したことです:
private static void Main(string[] args)
{
string text = "John Doe 123 45 #text Lorem ipsum dolor :)";
string pattern = @"(\w+)*([0-9]{2,5}).([0-9]{2,5}).#text";
Match match = Regex.Match(text, pattern, RegexOptions.IgnoreCase);
if (match.Success)
{
string key = match.Groups[0].Value;
Console.WriteLine(key);
}
}
編集:
ここにもう少し説明があります
表示名
表示名には任意の数の単語を含めることができます。たとえば
、 はファースト ネーム、はミドル ネーム、は姓でJohn Michael Smith
あるため有効です。は誰かのニックネームであり、英語以外の文字が含まれている可能性があるため、有効な表示名でもあります。ただし、数字を含む名前は無効です。. なんで?これが私たちのビジネス ルールです。数字は使用できません :)ここでは機能すると思いますが、英語以外の文字はカバーされないため機能しません。John
Michael
Smith
Šljaker
John1
\w
a-zA-Z
市外局番
ビジネス ルールは単純です。6 つの数字を含める必要があり、形式は問いません。これらはすべて有効な市外局番です: 123456、12 34 56、1234 56 など。正規表現ではスペースを削除する必要はありません。これはコードで処理します。
どんな助けでも大歓迎です!