私は入力文書を検証するための最良の解決法を見つけようとしています。私は文書のすべての行をチェックする必要があります。基本的に各行に無効な文字または文字が存在する可能性があります。検索(妥当性検査)の結果は、「無効な文字で行のインデックスを取得し、この行の無効な文字のインデックスを取得します。正規表現による文書フィルタリング
私は標準的な方法(ファイルを開く - >すべての行を読む - >文字を1つずつチェックする)を行う方法を知っていますが、この方法は最適化された方法ではありません。この代わりに、最良の解決策は "MatchCollection"(私の意見では)を使うことです。
しかし、これをC#で正しく行うにはどうすればいいですか?
リンク:
例: "ここではいくつかの入力テキスト、\ nは、このテキストの別の行"
最初の行[0]が[6]インデックスの無効な文字を見つけました。[1] [0,12,21]インデックスに無効な文字が見つかりました。
using System;
using System.Text.RegularExpressions;
namespace RegularExpresion
{
class Program
{
private static Regex regex = null;
static void Main(string[] args)
{
string input_text = "Some Înput text here, Îs another lÎne of thÎs text.";
string line_pattern = "\n";
string invalid_character = "Î";
regex = new Regex(line_pattern);
/// Check is multiple or single line document
if (IsMultipleLine(input_text))
{
/// ---> How to do this correctly for each line ? <---
}
else
{
Console.WriteLine("Is a single line file");
regex = new Regex(invalid_character);
MatchCollection mc = regex.Matches(input_text);
Console.WriteLine($"How many matches: {mc.Count}");
foreach (Match match in mc)
Console.WriteLine($"Index: {match.Index}");
}
Console.ReadKey();
}
public static bool IsMultipleLine(string input) => regex.IsMatch(input);
}
}
出力:
- は1行ファイルです
- どのように多くの試合:4
- インデックス:5
- インデックス:22
- 指数:34
- インデックス:43
*「無効な文字」*とは何ですか?標準的な方法*が速く、コードを投稿するかもしれません。 –
私はasciiでないleletterにマッチしたいと思う。 'Regex.Matches(s、@" [\ p {L} - [a-zA-Z]] ")'を試してください。ただし、これには行インデックス情報は含まれません。 –
コードのように、私はMatchCollectionを使用して複数行の解決策を見つけることができません。 – Nerus