[英]Python: re.match (r"1", "[1]") returns empty
[英]Python26, re.match returns only the last match
以下是我的源文件的內容:
Number= 010010
Name= Jan Mayen
Country= NORWAY
Lat= 70.9
Long= 8.7
...
似乎我的表達式存在重大錯誤或對re.match()的誤解,因為我需要獲取所有屬性(而不僅僅是最后一個屬性)。
>>> pattern = re.compile(r'^(([^\n]+)=[\ ]*([^\n]+)\n)+')
>>> print pattern.match(text).groups()
>>> ('Standard deviations= 3.0 3.0 2.5 1.7 1.0 0.9 0.8 1.1 1.1 1.6 2.2 2.5 \n', 'Standard deviations', '3.0 3.0 2.5 1.7 1.0 0.9 0.8 1.1 1.1 1.6 2.2 2.5 ')
有任何想法嗎?
編輯:哦..並且下面有不同格式的內容,因此我不想使用re.findall()
麥可
問題是您要重復捕獲組:
pattern = re.compile(r'^(...)+')
這意味着每次匹配都將覆蓋先前的匹配。 這是所有正則表達式引擎中的預期行為; 只有極少數(如.NET)允許以后訪問重復組的各個捕獲。
因此,實際上您確實需要將re.findall()
與正確的參數(例如,非重復組)一起使用,以避免re.findall()
匹配。 由於您沒有解釋什么設置了“跟進內容”與您真正想要的東西不同,因此在這里我無法進一步闡述。
您可能需要.findall()
pattern = re.compile(r'^(([^\n]+)=[\ ]*([^\n]+)\n)', re.MULTILINE)
pattern.findall(data)
蒂姆的答案提供了更多背景知識。
>>> text = '''Number= 010010
Name= Jan Mayen
Country= NORWAY
Lat= 70.9
Long= 8.7'''
>>> d = dict([re.split('=\w*', line, 1) for line in text.split('\n') if line])
>>> d
{'Country': 'NORWAY',
'Lat': '70.9',
'Long': '8.7',
'Name': 'Jan Mayen',
'Number': '010010'}
>>> d['Long']
'8.7'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.