2016-08-16 70 views
0

中值,而不做一個Python split,這將是正則表達式得到如下:先行獲得報價

s = '[@Country="US"][@Language="ES"]' 

["US", "ES"] 

目前一個我使用的是第二個報價,括號前不會停止,"]

re.findall(r'=\"(.+)?\"\]', s) 

這裏正確的正則表達式是什麼?

回答

2

你只需要一個否定的字符類:

="([^"]+)" 

regex demo

詳細

  • =" - 字面="文本
  • ([^"]+) - 第1組(這將是重新由re.findall轉換)除"以外的1個或多個字符
  • " - 雙引號。

注意:如果裏面有隻大寫ASCII字母,你可以使圖案="([A-Z]+)"更精確。

Python demo

import re 
p = re.compile(r'="([^"]+)"') 
s = '[@Country="US"][@Language="ES"]' 
print(p.findall(s)) 
# => ['US', 'ES'] 
1

正則表達式是貪婪的:指正則表達式匹配的字符串,最大可能的符合正則表達式,因爲你接受右括號之前的任何字符。 如果您接受任何字符,但是右括號可以按照您的要求工作。

re.findall(r'=\"([^\]]+)?\"\]', s) 

或者用+?激活非貪婪模式或正則表達式。只要找到右括號就匹配。

re.findall(r'=\"(.+?)?\"\]', s) 
1

你的正則表達式是差不多吧,試試這個:

re.findall(r'=\"(.+?)\"\]', s) 

?應該在括號內

0

我也會用Wiktor的解決方案。如果你有一個一致的模式,其中的組將總是被包含在「」中,那麼類似這樣的事情應該會很好。

import re 

output = [] 

s = '[@Country="US"][@Language="ES"]' 

regex = r'"([^"]+)"' 

value = re.findall(regex, s) 
output.append(value) 

print(output)