鱼C论坛

 找回密码
 立即注册
查看: 1894|回复: 9

[已解决]正则表达式

[复制链接]
发表于 2017-10-26 12:07:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我看有的人写的正则中匹配连字符(也就是减号-)的时候是使用\-

这个的意思是需要对连字符进行转义?

但是我在不添加斜杠的时候也可以正常匹配连字符啊,所以

\- 和 - 在正则表达式中是否有区别,如果有,麻烦提供一个可以区别的列子看看

如果没有区别,那一般是写\- 还是直接写 -

最佳答案
2017-10-26 13:37:58
本帖最后由 SixPy 于 2017-10-26 13:39 编辑

[-a-z9\-0-]

方括号里,
- 在首尾则不必转义
- 在其他字符之间,需要转义来表示 - 本身
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-10-26 12:29:26 | 显示全部楼层
那得看放什么地方,建议你在仔细看看、http://bbs.fishc.com/forum.php?m ... ypeid%26typeid%3D40
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-26 13:07:20 | 显示全部楼层
自问自答系列

自己已经找到了一个例子来看出加斜杠和不加斜杠的区别

  1. import re
  2. url = "http://www.stopfollow.com/re_test-django-1026"
  3. slug1 = re.findall(r'http://www.stopfollow.com/(?P<slug>[a-z\d\-_]+)',url)
  4. slug2 = re.findall(r'http://www.stopfollow.com/(?P<slug>[a-z0-9-_]+)',url)

  5. # slug3 = re.findall(r'http://www.stopfollow.com/(?P<slug>[a-z\d-_]+)',url)


  6. print(slug1)
  7. print(slug2)
  8. # print(slug3) 报错
复制代码


上面这个例子是要匹配成url的slug,当我用0-9表示数字的时候,匹配-可以直接写-

但是当我把0-9换成\d的形式的时候,就不能用-了,必须使用\-才行,不然会报错

这个例子虽然看出来的这2个形态是有区别的,但是具体不知道,可能是\d-组合在一起有什么关系吧,反正这三个符号不能一起用,不然就报错

因此,我觉得还是尽量使用\-比较好
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-26 13:37:58 | 显示全部楼层    本楼为最佳答案   
本帖最后由 SixPy 于 2017-10-26 13:39 编辑

[-a-z9\-0-]

方括号里,
- 在首尾则不必转义
- 在其他字符之间,需要转义来表示 - 本身
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-26 17:19:32 | 显示全部楼层
SixPy 发表于 2017-10-26 13:37
[-a-z9\-0-]

方括号里,

你这个“首位”是说法好像不对,你看我那个slug2就没有放到首尾,不会报错

我只发现了它跟\d放在一起就会报错,不过这个到底为什么我也不清楚

但是还好,我大概知道什么时候需要加\了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-26 17:26:05 | 显示全部楼层
gopythoner 发表于 2017-10-26 17:19
你这个“首位”是说法好像不对,你看我那个slug2就没有放到首尾,不会报错

我只发现了它跟\d放在一起 ...

在方括号里写多个相同的符号是无意义的
要表示减号- ,我一般是放在第一个,避免歧义。
没必要转牛角尖,非要放到中间去~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-26 17:29:34 | 显示全部楼层
本帖最后由 gopythoner 于 2017-10-26 17:30 编辑
SixPy 发表于 2017-10-26 17:26
在方括号里写多个相同的符号是无意义的
要表示减号- ,我一般是放在第一个,避免歧义。
没必要转牛角尖 ...


我并不是纠结这个-的位置和使用问题,只是突然看到别人写的django的urls中正则跟我的区别就是\这个,所以怕我写错了会匹配不到可能出现的url,然后才有了这些

相对来说,“歧义”这个说法,应该是比较好解释的

问题不大,知道怎么用就行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-26 17:42:27 | 显示全部楼层
gopythoner 发表于 2017-10-26 17:29
我并不是纠结这个-的位置和使用问题,只是突然看到别人写的django的urls中正则跟我的区别就是\这个,所 ...

  1. >>> ord('9');ord('_')
  2. 57
  3. 95
  4. >>> import re
  5. >>> re.compile('[9-0]')
  6. Traceback (most recent call last):
  7.   File "<pyshell#251>", line 1, in <module>
  8.     re.compile('[9-0]')
  9. sre_constants.error: bad character range
  10. >>> re.compile('[9-_]')
  11. re.compile('[9-_]')
  12. >>>
复制代码


- 作为连字符时,表示一个连续递增的范围
9 比 0 大,所以 '[9-0]' 是会报错的
9 比 _ 小,所以 '[9-_]' 是正确的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-26 17:52:46 | 显示全部楼层
SixPy 发表于 2017-10-26 17:42
- 作为连字符时,表示一个连续递增的范围
9 比 0 大,所以 '[9-0]' 是会报错的
9 比 _ 小,所以 '[ ...

受教了,还有这种事情
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-26 21:07:16 | 显示全部楼层
学习了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-3 09:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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