2017-05-15 9 views
1

文字列"//div[@id~'objectnavigator-card-list']//li[@class~'outbound-alert-settings']"の場合、"@..'...'""@id~'objectnavigator-card-list'"または"@class~'outbound-alert-settings'"のようになります。しかし、正規表現((@.+)\~(\'.*?\'))を使用すると、"@id~'objectnavigator-card-list']//li[@class~'outbound-alert-settings'"が見つかります。どのように正常に文字列を見つけるために正規表現を変更するには?Python regex find matches stringの使い方は?

+0

適切に質問をフォーマットしてください。 – Rahul

答えて

3

使用非キャプチャ、非貪欲、インナーブラケット上の修飾子とない終端文字を検索し、例えば:

テスト文字列を返すには
re.findall(r"((?:@[^\~]+)\~(?:\'[^\]]*?\'))", test) 

["@id~'objectnavigator-card-list'", "@class~'outbound-alert-settings'"] 
+0

ありがとう、それは私のために働く。 – Harjeb

1

制限文字数見積もりと一致しないように見積もりを一致させたい場合:

>>> re.findall(r'@[a-z]+~\'[-a-z]*\'', x) 

私が知っているキャラクターだけを探すのは、より合理的なマッチからの文字を省略するのではなく、マッチするセクションで行う方がはるかに簡単です。あなたはこのパターンを試すことができますあなたの現在のテスト文字列の入力の場合

1

import re 

a = "//div[@id~'objectnavigator-card-list']//li[@class~'outbound-alert-settings']" 
# find everything which begins by '@' and neglect ']' 
regex = re.compile(r'(@[^\]]+)') 
strings = re.findall(regex, a) 
# Or simply: 
# strings = re.findall('(@[^\\]]+)', a) 

print(strings) 

出力:

["@id~'objectnavigator-card-list'", "@class~'outbound-alert-settings'"]