文字列の分割に正規表現パターン((?!(SEPARATOR)).)*
を使用します。(?!...)regexパターンを使用して不一致部分全体をスキップする方法は?
using System;
using System.Text.RegularExpressions;
public class Program
{
public static void Main()
{
var separator = "__";
var pattern = String.Format("((?!{0}).)*", separator);
var regex = new Regex(pattern);
foreach (var item in regex.Matches("first__second"))
Console.WriteLine(item);
}
}
SEPARATOR
は単一の文字ですが、それが長いときに1つの文字が、私は予想外の結果を得るときには正常に動作します。上記のコードでは、2番目に一致する文字列は "second"の代わりに "_second"です。一致しないセパレータ全体をスキップするためにパターンを変更するにはどうすればよいですか?
私の本当の問題は、引用符で囲んだ行区切りをスキップする必要がある行を分割することです。私の行区切り記号はあらかじめ定義された値ではなく、たとえば "\ r \ n"とすることができます。
いいえ、そのパターンで分割してください。それが正規表現パターンであれば、 'Regex.Split'を使用してください。' __'のようなリテラル固定文字列であれば 'string.Split'を使用してください。 .NET正規表現で* matching *することで、あなたが望むものを達成することはできません。 PCREでは '(* SKIP)(* FAIL)'動詞を使用しますが、.NETではサポートされていません。 –
これに 'string.Split'を使わないのはなぜですか? Ex。 '' first__second ".Split(new [] {" __ "}、StringSplitOptions.None);' – ZarX
私のパターンはより複雑なので、regexを使いたいと思います。 String.Splitは私の目的には十分ではありません。 – user1701074