[英]Regular expression not matching re.match
我正在嘗試匹配解析響應的正則表達式.....
error code|error text|submission reference
2|missing or invalid fields|0
它使用re.match(self.error_format)
我嘗試過error_format為:
(?P<status_code>[0-9]+)|(?P<status_message>.+)|(?P<gateway_message_id>[a-zA-Z0-9-]+)
但這與行error code|error text|submission reference
而不是根據需要匹配第二行。
還嘗試了:
(?P<status_code>[0-9]+)\|(?P<status_message>.+)\|(?P<gateway_message_id>[a-zA-Z0-9-]+)
但這根本不匹配。
更新:
我想做的只是匹配2 |缺失或無效字段| 0,但全文是錯誤代碼|錯誤文本|提交參考2 |缺失或無效字段| 0,所以我需要跳過第一部分。
即
msg = re.match('(?P<status_code>[0-9]+)\|(?P<status_message>.+)\|(?P<gateway_message_id>[a-zA-Z0-9-]+)', 'error code|error text|submission reference 2|missing or invalid fields|0')
嘗試不匹配分隔符。 像這樣:
(?P<status_code>^[0-9][^|]*)\|(?P<status_message>[^|]+)\|(?P<gateway_message_id>.+)
msg = re.match('(?P<status_code>[0-9]+)\|(?P<status_message>[^|]+)\|(?P<gateway_message_id>[a-zA-Z0-9-]+)', '2|missing or invalid fields|0')
完全匹配,然后您可以通過msg.group('status_code')
訪問各個部分
不帶\\的版本也將匹配,但是它將僅捕獲“ 2”,並且不會填充第二行示例中的所有三個組。
如果要在多行文本上運行此命令,可以執行
matches = re.finditer('(?P<status_code>[0-9]+)\|(?P<status_message>[^|]+)\|(?P<gateway_message_id>[a-zA-Z0-9-]+)', s)
for m in matches:
print m.group('status_code'), m.group('status_message'), m.group('gateway_message_id')
或者相反:
for line in youtext.split('\n'):
m = re.match(msg = re.match('(?P<status_code>[0-9]+)\|(?P<status_message>[^|]+)\|(?P<gateway_message_id>[a-zA-Z0-9-]+)', line)
if m:
print m.group('status_code'), m.group('status_message'), m.group('gateway_message_id')
我認為這涵蓋了所有選項,並且沒有一個選項與第一部分中沒有數字錯誤代碼的第一行匹配。
import re
tests = '''\
error code|error text|submission reference
2|missing or invalid fields|0'''.splitlines()
for test in tests:
pat = r'''(?x)
(?P<status_code>[^|]+)
[|](?P<status_message>.+)
[|](?P<gateway_message_id>[\w\d-]+)'''
print(re.match(pat, test).groups())
產量
('error code', 'error text', 'submission')
('2', 'missing or invalid fields', '0')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.