12

テキストファイルに次のテキストがあるとします

最初のテキスト

「何かのテキスト」

"124arandom txt を解析してはいけません!@

「124 いくつかのテキスト」

「어떤글」

このテキストは解析されるべきではありません

Some Text124 Some Textおよび어떤 글一致した文字列として取得したいと思います。テキストは 1 行ずつ読み上げられます。キャッチは、引用符内にある場合、外国語にも一致する必要があることです。

更新: 奇妙なことがわかりました。私はいくつかのランダムなものを試していましたが、次のことがわかりました:

string s = "어떤 글"
Regex regex = new Regex("[^\"]*");
MatchCollection matches = regex.Matches(s);

一致のカウントは 10 で、内部にいくつかの空のアイテムが生成されています (解析されたテキストはインデックス 2 にあります)。これが、Regex.Replace を行っているときに空の文字列を取得し続けた理由かもしれません。なぜこうなった?

4

2 に答える 2

25

テキストを 1 行ずつ読むと、正規表現は

"[^"]*"

のようにエスケープされた引用符が含まれていない限り、引用符で囲まれたすべての文字列が検索されます"a 2\" by 4\" board"

それらを正しく一致させるには、必要です

"(?:\\.|[^"\\])*"

引用符を一致の一部にしたくない場合は、ルックアラウンド アサーションを使用します。

(?<=")[^"]*(?=")
(?<=")(?:\\.|[^"\\])*(?=")

これらの正規表現は、C# の正規表現として、次のように作成できます。

Regex regex1 = new Regex(@"(?<="")[^\""]*(?="")");
Regex regex2 = new Regex(@"(?<="")(?:\\.|[^""\\])*(?="")");
于 2012-08-08T07:19:07.550 に答える
0

. 正規表現を使用して、必要なテキストとの一致を試みることができます。ループまたは必要なものを使用できます。

string str = "\"your text\"";
//check for at least on char inside the qoutes
Regex r = new Regex("\".+\"");
bool ismatch = r.IsMatch(str); 
于 2012-08-08T07:38:12.393 に答える