鱼C论坛

 找回密码
 立即注册
查看: 1103|回复: 7

[已解决]请问这个正则表达式怎么写?

[复制链接]
发表于 2018-8-14 08:25:55 | 显示全部楼层 |阅读模式
10鱼币

花了我一个下午也没有写出来
要求是这样的:
匹配一个html标签,格式要尽量宽松,开始和闭合标签必须相同

结果我只能写出以下的表达式:
  1. <\\w+(?: ?\\w+ ?= ?\'?"?.+\'?"?)?>(?:.|\n)*(?:< ?/ ?\\w+ ?>)?
复制代码

结果我发现:
  1. >>> import re
  2. >>> re.findall('<\\w+(?: ?\\w+ ?= ?\'?"?.+\'?"?)?>(?:.|\n)*(?:< ?/ ?\\w+ ?>)?','<html></fishc>')
  3. ['<html></fishc>']
  4. >>>
复制代码

天哪……这……
PS:哪怕有多条表达式或者动态生成表达式也没事,速度不会太慢,能用就行……
最佳答案
2018-8-14 08:25:56
研究了一下,也顺便巩固一下知识
关键点是前一个标签名与后一个标签名要一致
(?P<id>\w+) 这一坨就是匹配到html等标签,随后在后面用(?P=id)调用之前匹配到的字符串进行匹配
  1. import re
  2. patten = re.compile('.*(<(?P<id>\w+)>.*</(?P=id)>)')
  3. a = re.findall(patten, """23242<html>333</html>""")
  4. b = re.findall(patten, """23242<html>333</html3>""")
  5. print(a)
  6. print(b)
复制代码


输出:
[('<html>333</html>', 'html')]
[]

我这里没有匹配参数。将就看吧

最佳答案

查看完整内容

研究了一下,也顺便巩固一下知识 关键点是前一个标签名与后一个标签名要一致 (?P\w+) 这一坨就是匹配到html等标签,随后在后面用(?P=id)调用之前匹配到的字符串进行匹配 输出: [('333', 'html')] [] 我这里没有匹配参数。将就看吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-14 08:25:56 | 显示全部楼层    本楼为最佳答案   
研究了一下,也顺便巩固一下知识
关键点是前一个标签名与后一个标签名要一致
(?P<id>\w+) 这一坨就是匹配到html等标签,随后在后面用(?P=id)调用之前匹配到的字符串进行匹配
  1. import re
  2. patten = re.compile('.*(<(?P<id>\w+)>.*</(?P=id)>)')
  3. a = re.findall(patten, """23242<html>333</html>""")
  4. b = re.findall(patten, """23242<html>333</html3>""")
  5. print(a)
  6. print(b)
复制代码


输出:
[('<html>333</html>', 'html')]
[]

我这里没有匹配参数。将就看吧

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
无符号整形 + 5 + 5 + 3 感谢~^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-14 08:30:50 | 显示全部楼层
这么长只匹配<html></fishc>吗。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-8-14 08:32:56 | 显示全部楼层
塔利班 发表于 2018-8-14 08:30
这么长只匹配吗。。

是啊 为了语法宽松些
正常情况下<html></fishc>是不应该匹配的(不配对)

点评

也为了匹配<a href="fishc.com.cn">鱼C论坛</a>之类的有参数的html标签  发表于 2018-8-14 08:33
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-14 11:43:40 | 显示全部楼层
赞赞
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-8-14 15:50:48 | 显示全部楼层
小Q学Python 发表于 2018-8-14 08:25
研究了一下,也顺便巩固一下知识
关键点是前一个标签名与后一个标签名要一致
(?P\w+) 这一坨就是匹配到ht ...

谢谢哈,我自己补充了下,可以匹配参数了:
  1. .*(<(?P<id>\w+(?: ? (?:\'|")?(?:.|\n)(?:\'|")?)?)>(?:.|\n)*</(?P=id)>)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 11:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表