2016-06-20 5 views
1

だけ...コミュニティが助けることができる期待して、正規表現を理解するの次のステージにグローバル

文字列= These.Final.Hours-AUSVERSION.2013-TEST-TESTAGAIN-YIFY.cp(tt123456).MiLLENiUM.mp4

が先行する複数のテストの名前がありますを取得A ' - ' 私は正規表現 \(?<=-)\w+\g

結果から派生ハイフン:

  • AUSVERSION
  • TEST
  • TESTAGAIN
  • YIFY

私は正規表現\(?!.*-)(?<=-)\w+\g

結果に貪欲を使用して非常に最後の結果を解析することができます

  • YIFI(第四&最後の結果)

第1、第2、または第3の結果のいずれかを解析するのに手伝ってもらえますか?

+0

あなたは[ '/(?<=-|-\s)\w+/g'](https://regex101.com/r/wR3mB5/1)を意味しますか?あるいは、 '' /(?<=-)\w+/'](https://regex101.com/r/wR3mB5/2)など? *第1、第2、第3のいずれかの結果がグローバルに*はっきりと聞こえません。 –

+0

https://regex101.com/#python –

+1

だから、 ' - \ s *(\ w +)'を 're.findall'と一緒に使って、必要なインデックスを使ってマッチにアクセスしてください。 ** [このデモ](https://ideone.com/h0LykP)をご覧ください。** –

答えて

0

Pythonでは、あなたは、シンプル-\s*(\w+)正規表現とre.findallでこれらの一致を得ることができ、その後、適切なインデックスを持つ任意の試合へのアクセス:ハイフンのため

import re 
s = 'These.Final.Hours-AUSVERSION.2013-TEST-TESTAGAIN-YIFY.cp(tt123456).MiLLENiUM.mp4' 
r = re.findall(r'-\s*(\w+)', s) 
print(r[0]) # => AUSVERSION 
print(r[1]) # => TEST 
print(r[2]) # => TESTAGAIN 
print(r[3]) # => YIFY 

-\s*(\w+)パターン検索:

IDEONE demoを参照してください。続いて0+の空白を入力し、1桁以上の数字、文字または下線をキャプチャします。 re.findallはキャプチャグループでキャプチャされたテキストのみを返します。したがって、グループ1の値は(\w+)でキャプチャされます。 re.searchで、これらの試合を一つずつ取得するには

、あなたはNが希望一致指数であり、^(?:.*?-\s*(\w+)){n}を使用することができます。ここにはregex demoがあります。

quick Python demo(実際のコードでは、一致があったかどうかをチェックした後re.searchのみアクセスグループ1つの値の結果を代入):パターンの

s = "These.Final.Hours-AUSVERSION.2013-TEST-TESTAGAIN- YIFY.cp(tt123456).MiLLENiUM.mp4" 
print(re.search(r'^(?:.*?-\s*(\w+))', s).group(1)) 
print(re.search(r'^(?:.*?-\s*(\w+)){2}', s).group(1)) 
print(re.search(r'^(?:.*?-\s*(\w+)){3}', s).group(1)) 
print(re.search(r'^(?:.*?-\s*(\w+)){4}', s).group(1)) 

説明:

  • ^ - 文字列の開始
  • (?:.*?-\s*(\w+)){2} - (ここでは)2 sequeに一致する非キャプチャグループ次のように入力します。
    • .*? - 0 +改行以外の文字(re.DOTALL修飾語が使用されていないため)
    • - - ハイフン
    • \s*から0以上の空白
    • (\w+) - グループ1 1+単語文字(文字、数字または下線)を取り込みます。