2016-09-06 23 views
0

最後の文字の後にテキストが必要なN#のハイフンを持つパターン(https://regex101.com/r/iN9hG6/2)が与えられた場合、最初:私は、それぞれの場合にデュバルをしたいRegex(Python)の1-Nハイプンを含む最後のハイフンの後の文字列

<details>Fiction - Mystery - Duvall</details>

<details>Fiction - Mystery - Horror - Duvall</details>

免責事項:私の質問に、次の人のために、私はこれは

Finding the last specific character type in a stringのようにたくさん見える実現が、私は無駄にその解決策を適用しようとしました。おそらく完全に正規の初心者としてそれを理解していない、ちょうど私がそれらを無視し、重複した作業を求めていたと思う答えをしたい人を望んでいない。

+0

あなたは

'のようなものを使用し、あまりにも具体的である必要はありません。* - ?\ sの*([^ - ] *?)
' https://regex101.com/r/iN9hG6/ 8 – sln

答えて

0

を私は何だと思います「を探して再度このさ:アイデアは内部で可能な限り一致させることです

<details>(?:\w+ - *)*(\w+)<\/details> 

(:?)後方参照が行われることはありませんグループは、その後の事yと一致実際に気にするのは最後のトークンです。以下の例は、構文が何を意味しているかについてもう少し詳しく知るはずです。

Example

+0

私がそれぞれの事例で間違いをしていないのであれば、私の最初の ' - 'の後にすべてのものが得られます。どちらの場合でも、 'Duvall'を返すべきです – user3649739

+0

OIC、あなたが提供する例がうまくいかず、更新するつもりだったのかわからないのにあなたのパターンを貼り付けた'

(?:\ w + - *)*(\ w +)<\/details> 'サンプル正規表現https://regex101.com/r/iN9hG6/4を更新して、完全に動作します。 – user3649739

+0

私が気づいたことは、最後の単語では動作しますが、最後の単語では動作しません。 'Duvall McNiel'すなわち、最後のハイフンの後の文字列と単語はここにあります:https://regex101.com/r/iN9hG6/5 – user3649739

0

提供されたサンプル入力データで判断すると、これはXMLであり、のまたはlxmlなどの特殊なツールで解析する必要があります。

import xml.etree.ElementTree as ET 

data = """ 
<root> 
    <details>Fiction - Mystery - Duvall</details> 
    <details>Fiction - Mystery - Horror - Duvall</details> 
</root>""" 

root = ET.fromstring(data) 
for details in root.findall("details"): 
    text = details.text 
    print(text.split(" - ", 1)[1]) 

プリント:最初のハイフンの後にデータを取得するために、我々はstr.split()が1のmaxsplit価値を提供し、その結果の最後の項目になっ使います

Mystery - Duvall 
Mystery - Horror - Duvall 
0

時にはスプリット()関数は、正規表現よりも簡単に使用できます。

test_string = "<details>Fiction - Mystery - Horror - Duvall</details>" 
author = test_string.split("-")[-1][2:-10] 
関連する問題