2016-08-25 8 views
2

の最後の特定の文字の種類を見つける:私は多少このように構築された文字列で検索していた文字列

bla bla bla *Priorities: bla bla - yada yada - Keyword, yada *Terms 

と、私はそうのようなキーワードキャプチャすることができますいくつかのケースではしかし

\*Priorities:.*?-.*?- (.*?),.*?\*Terms 

を多かれ少なかれ、ハイフンがあります

bla bla bla *Priorities: bla bla - yada yada - bla bla - Keyword, yada *Terms 

私はあまりにもそれを得ることができます。

\*Priorities:(.*?-){1,4} (.*?),.*?\*Terms 

しかし、私は2番目のキャプチャグループを避けようとしています(コードを変更する必要はありません)。パターンマッチの最後から最後の.?*-までの検索が何らかの方法で行われることはありますか?パターンマッチで文字列(*Priorities:)の先頭を使用して、2番目のキャプチャグループを回避しますか?

+1

['\ *優先度:。* - ([^、] *)、。*?\ * Terms'](https://regex101.com/r/iN9hG6/1)はあなたのために機能しますか? – anubhava

+1

@anubhavaそれはキャプチャグループを「Keyword1 Keyword2」にしようと思っていたようですが、最近、必要に応じて正当な正規表現を行ったように説明していますが、ロジックを理解するのは紛失していますか?あなたは、私が喜んで公式にそれを受け入れることができます詳細の答えとして置く可能性がありますありがとう。 – user3649739

+0

ok私は以下の回答を掲載しました。 – anubhava

答えて

0

\*Priorities:.*- ([^,]*),.*?\*Terms 

正規表現の分裂:

\*Priorities: # Match literal *Priorities: 
.*    # Match 0 or more any character (greedy match) 
-    # Match hyphen and space 
([^,]*),  # Match 0 or more of non-comma characters followed by a comma 
.*?   # Match 0 or more any character (lazy match) 
\*Terms  # Match literal *Terms 

RegEx Demo

注意を怠惰な一致による.*の前にいることハイフン+スペースハイフン+スペースが最後に出現する前に最長マッチに一致することを確認しています。

1

カンマ以外のカンマで区切られた1〜4つのグループと一致します。次に、キーワードとスペースのあとに終了シーケンスを続けます。

あなたは、両方の入力文字列に一致するように、この正規表現を使用することができます
\*Priorities:(?:[^-]+-){1,4} (\w+).*\*Terms 
+0

私が選んだパターンのためにおそらく私はこれを混乱させてしまいました。カンマは本当にここでは超過です。重要なのは、最初の1〜4の異なるハイフン/テキストパターンの後にテストを見つけようとしていることです。だから開始: - bla - X終了または開始 - bla - yada - X終了または開始 - bla - yada - yada - Xすべての終了を見つけるX – user3649739

+0

私は答えを更新しました – Barmar

+0

ありがとう、しかし、問題は、1-xのキャプチャグループがあります。私は、これを解析するコードを変更するだけで、結局簡単な解決策であったグループ#が自分の価値を持っていることを示すことができました。 – user3649739

関連する問題