Crossin的编程教室

标题: 正则表达式问题 [打印本页]

作者: cczztt    时间: 2018-7-24 20:02
标题: 正则表达式问题
import re
text = "<b>aasdadbd</b>"
m = re.findall(r"(?<=<(?<a>\w+)>).*(?=<(\/\k<a>>)",text)
if m:
    print (m)
else:
    print ('not match')

代码想要匹配的是在一对<tag></tag>之间的内容,但是发现有两个问题:
1. (?<=<(?<a>\w+)>)
这里报错提示lookbehind中不能用 + 重复,且命名组不可用。

2. m = re.findall(r"(?<=<(\w)>).*(?=<(\/\1))",text)
我把表达式的条件收窄之后,输出的只有尖括号里的内容(输出了[('b', '/b')]),貌似是因为我把尖括号里的表达式括起来了,所以优先匹配了括号里的内容?如果要正确显示结果应该怎么做?

作者: crossin先生    时间: 2018-7-25 15:36
你这个太复杂以至于我也没看懂……
为啥不直接 <\w+>([\s\S]*?)</\w+>
作者: cczztt    时间: 2018-7-25 17:00
crossin先生 发表于 2018-7-25 15:36
你这个太复杂以至于我也没看懂……
为啥不直接 ([\s\S]*?)


的确你给的这个是可以用的,但是在多重tag嵌套的text里可能就不能正确匹配了。。。

import re
text = "<b>aasdadbd</b>"
m = re.findall(r"<(\w+)>([\s\S]*?)</\1>",text)
if m:
    print (m)
else:
    print ('not match')
我把结束tag的表达式改成了</\1>来表示需要和开始tag成对才能匹配,但是输出结果里又多出来了一个 b 。。。

C:\Users\Administrator\PycharmProjects\First_test\venv\Scripts\python.exe C:/Users/Administrator/PycharmProjects/First_test/1.py
[('b', 'aasdadbd')]

Process finished with exit code 0

这个小括号括了的内容不想他输出该怎么办呢?
作者: crossin先生    时间: 2018-7-26 18:40
cczztt 发表于 2018-7-25 17:00
的确你给的这个是可以用的,但是在多重tag嵌套的text里可能就不能正确匹配了。。。

import re

这是分组的效果,你不用它就好了呀
或者你用 search + group 的方法




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5