簡體   English   中英

正則表達式不匹配re.match

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM