2016-11-17 2 views
4

Regexを使用して文字列を検索しようとしています。ここでは文字列がテキストビジュアライザで次のようになります。RegexOptions.Multilineは無視されるようです

0 -12.67 Td 
/Helv 14 Tf 
(Source: ABC/XYZA) Tj 
0 -15.624 Td 
(Job Source No.: GRQX ID 27299) Tj 
0 -15.624 Td 

私はそれにホバリングして値を表示すると:

0 -12.67 Td\n/Helv 14 Tf\n(Source: ABC/XYZA) Tj\n0 -15.624 Td\n(Job Source No.: GRQX ID 27299) Tj\n0 -15.624 Td 

を私は次のパターンとRegexOptions.MultilineRegex.Matches()を使用しています:

^(?<=[(]).+(?=[)]) 

これは一致するものを返しません。私はキャレットを省略すると、このような:

(?<=[(]).+(?=[)]) 

その後、Regex.Matches()リターンの両方の試合:

Source: ABC/XYZA 
Job Source No.: GRQX ID 27299 

は、どのように私は行の最初の文字に一致させることができますか?あなたのパターンに^(?<=[(])^(ラインの開始)の前にあることを(を要求するよう

+2

後ろに。あなたがアンカーを背後の ''(?<=^[(])。+(?= [)]) 'に置くとうまくいくでしょう。 – juharr

答えて

3

正規表現パターンで後読みは、現在の位置の左側に文字をチェックします。行の先頭には、文字列の先頭には何もないか、改行文字があります。したがって、どの文字列にも一致しません。

実際には、必要な部分文字列を取得するためのルックアラームは必要ありません。 RegexOptions.Multilineオプションを使用して、次の正規表現を使用します。

^\(([^()]+)\) 

^はマッチが文字列の先頭に表示され、([^()]+)は、グループ1に()以外の1つの以上の文字をキャプチャし、その後)ますことを確認しますでしょう一致する。

は、次のコードを使用し、あなたが必要との結果がC#では1

enter image description here

グループであり、regex demo参照してください:あなたは見に続いてアンカーを持っているためだ

var res = Regex.Matches(str, @"^\(([^()]+)\)", RegexOptions.Multiline) 
    .Cast<Match>() 
    .Select(m => m.Groups[1].Value) 
    .ToList(); 
関連する問題