首页 > 解决方案 > 如何创建匹配 `change://problem/59689726` 和 `change://1234567` 的正则表达式

问题描述

我正在尝试正则表达式匹配字符串change://problem/59689726change://1234567但下面的代码只匹配前者,如何更改正则表达式以匹配两者?如何使problem/可选?

输入代码:

import re
out = '''
<change://problem/59689726> This is a test1
change://1234567 This is a test2
[Problem]
This is problem desription
'''
m = re.findall("[\S]*(?:change:\/\/problem\/(\d{8,8}))", out.split('[Problem]')[0])
if m:
    for radar in set(m):
        print radar

CURRENT OUTPUT:-

59689726

EXPECTED OUTPUT:-

59689726 1234567

标签: pythonregex

解决方案


如果您需要在之后获得任何 1 位以上的数字,change://problem/或者change://您可以使用

re.findall("change://(?:problem/)?(\d+)", out.split('[Problem]')[0])

请参阅Python 演示正则表达式演示

模式匹配:

  • change://- 文字字符串
  • (?:problem/)?problem/-子字符串出现 1 次或 0 次
  • (\d+)- 第 1 组(返回的内容re.findall):1+ 位

推荐阅读