Python中正则表达式以特定的某类字符串作为模式串的开头和结尾如何表达?

Python中正则表达式以特定的某类字符串作为模式串的开头和结尾如何表达?

问题描述:

在openjudge做题中遇到的问题,题目要求如下:

img

题目要求的模式串以

<X>


```开头,
```python
</X>

结尾,中间内容不限,而且X为不为零的小写字母,字符数量不限。
根据提示的思路可以用正则表达式分组来求解,只是目前仅能得到部分内容,不能满足题目要求,求指点。

import re

n = int(input())
m = '(<\\w+>).*?((\\(\\d{1,2}\\))-\\d{3})+?.*?(</\\w+>)'
for i in range(n):
    s = input()
    lst = re.findall(m, s)
    print(lst)

样例输入:


2
<bb>(01)-123<a>bbb(02)-2784KK</a><xy>stk(1)-123(03)-345b</xy>(04)-123</xy><z>(05)-123</zz>zz<yy>(06)-123</yy>
<bb>(01)-123<a><k>1223</k><a>(01)-12</a>

我的程序输出:
[('', '(01)-123', '(01)', ''), ('', '(1)-123', '(1)', ''), ('', '(05)-123', '(05)', ''), ('', '(06)-123', '(06)', '')]

[('', '(01)-123', '(01)', '')]
样例输出:

<xy>1,03</xy>
<yy>06</yy>
NONE

正则表达式 开始 是^ 结束是$

在模式中使用分组

import re

m = r'<(\w+)>.*?\((\d{1,2})\)-(\d{3})+?.*?</\1>'
obj = re.match(m,"<str>(1)-123</str>")
print(obj.group(1))
print(obj.group(2))
print(obj.group(3))