中值,而不做一個Python split
,這將是正則表達式得到如下:先行獲得報價
s = '[@Country="US"][@Language="ES"]'
["US", "ES"]
目前一個我使用的是第二個報價,括號前不會停止,"]
:
re.findall(r'=\"(.+)?\"\]', s)
這裏正確的正則表達式是什麼?
中值,而不做一個Python split
,這將是正則表達式得到如下:先行獲得報價
s = '[@Country="US"][@Language="ES"]'
["US", "ES"]
目前一個我使用的是第二個報價,括號前不會停止,"]
:
re.findall(r'=\"(.+)?\"\]', s)
這裏正確的正則表達式是什麼?
你只需要一個否定的字符類:
="([^"]+)"
詳細:
="
- 字面="
文本([^"]+)
- 第1組(這將是重新由re.findall
轉換)除"
以外的1個或多個字符"
- 雙引號。注意:如果裏面有隻大寫ASCII字母,你可以使圖案="([A-Z]+)"
更精確。
import re
p = re.compile(r'="([^"]+)"')
s = '[@Country="US"][@Language="ES"]'
print(p.findall(s))
# => ['US', 'ES']
正則表達式是貪婪的:指正則表達式匹配的字符串,最大可能的符合正則表達式,因爲你接受右括號之前的任何字符。 如果您接受任何字符,但是右括號可以按照您的要求工作。
re.findall(r'=\"([^\]]+)?\"\]', s)
或者用+?
激活非貪婪模式或正則表達式。只要找到右括號就匹配。
re.findall(r'=\"(.+?)?\"\]', s)
你的正則表達式是差不多吧,試試這個:
re.findall(r'=\"(.+?)\"\]', s)
?應該在括號內
我也會用Wiktor的解決方案。如果你有一個一致的模式,其中的組將總是被包含在「」中,那麼類似這樣的事情應該會很好。
import re
output = []
s = '[@Country="US"][@Language="ES"]'
regex = r'"([^"]+)"'
value = re.findall(regex, s)
output.append(value)
print(output)