0

2 つの文字列の間のすべてを正規表現で照合したい。

入力テキストは次のようになります。

 Back to previous › 






             › Send Message 

                             › Add as Buddy 
             › Add as Favorite 
             › Block this Person 





         People who like this (click to upvote) 

Back to previous >People who like this (click to upvote)の間のすべてを一致させたい。

私は最も簡単な正規表現を試しました(?<=\ Back\ to\ previous\ ›\ ).*(?=People\ who\ like\ this\ profile\ \(click\ to\ upvote\)\ )が、うまくいきませんでした。

アイデアは、キャッチするのが改行、タブ、英数字などであっても、2行\文字列の間のすべてをキャッチすることです。

4

2 に答える 2

1

この正規表現を試してください:

(?<=Back\sto\sprevious.*?›).?(?=People\swho\slike\sthis)

string Input = @"Back to previous › 






         › Send Message 

                         › Add as Buddy 
         › Add as Favorite 
         › Block this Person 





     People who like this (click to upvote) ";
        foreach (Match M in Regex.Matches(Input, @"(?<=Back\sto\sprevious.*?›).*?(?=People\swho\slike\sthis)", RegexOptions.IgnoreCase | RegexOptions.Singleline))
        {
            MessageBox.Show(M.Value.Trim());
        }

これにより、メッセージ ボックスに次のように表示されます。

› Send Message 



                         › Add as Buddy 

         › Add as Favorite 

         › Block this Person
于 2012-09-23T13:07:18.487 に答える
0

別の行に文字列区切り文字 (「前に戻る」など) があることが確実な場合は、正規表現を使用する理由はありません。

string text = /* Get Text */;
string lines = text.Split();
IEnumerable<string> content = lines.Skip(1).Take(lines.length - 2);

または、次のようにします。

const string matchStart = "Back to previous >";
const string matchEnd = "People who like this (click to upvote)"
int beginIndex = text.IndexOf(matchStart) + matchStart.Length;
int endIndex = text.IndexOf(matchEnd);
string content = text.Substring(beginIndex, endIndex - beginIndex);

(私が投稿したコードはテストされていませんが、動作するはずです)

于 2012-09-23T12:56:59.590 に答える