正则表达式不匹配重新匹配

2024-03-29 06:01:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试匹配一个解析响应的正则表达式。。。。。在

error code|error text|submission reference
2|missing or invalid fields|0

它使用re.match(self.error_format)

我尝试过错误格式为:

^{pr2}$

但这与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')

Tags: ortextremessagesubmissionfieldsmatchstatus
3条回答

尽量不要匹配分隔符。像这样:

 (?P<status_code>^[0-9][^|]*)\|(?P<status_message>[^|]+)\|(?P<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())

收益率

^{pr2}$
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”,并且不会填充第二行示例中的所有三个组。在

如果您想在包含多行的文本上运行此操作,可以执行以下操作

^{pr2}$

或者反过来说:

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')

我想这涵盖了所有的选项,而且没有一个选项与第一部分中没有数字错误代码的第一行相匹配。在

相关问题 更多 >