鱼C论坛

 找回密码
 立即注册
查看: 1547|回复: 5

[已解决]Python正则表达式的?:就是为了不分组?好像没什么作用啊。。

[复制链接]
发表于 2017-12-20 16:14:49 | 显示全部楼层 |阅读模式

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

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

x
  1. re.findall(r'(?:\w+\.)*(\w+\.com)','http://google.com http://www.google.com http://code.google.com')
复制代码

输出:
['google.com', 'google.com', 'google.com']


  1. re.findall(r'(\w+\.com)','http://google.com http://www.google.com http://code.google.com')
复制代码

输出:
['google.com', 'google.com', 'google.com']


为什么要多此一举呢?
最佳答案
2017-12-20 20:40:49
桦少 发表于 2017-12-20 18:05
和你说的不一样

import re
s = 'http://1.google.com http://2.www.google.com http://3.code.google.com http://4.www.code.google.com'
recom = re.compile(r'(\d\.)(?:\w+\.)*(\w+\.com)')
print(recom.findall(s))
有些时候不得不分组但是又不想保存的时候就用(?:)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-20 17:00:31 | 显示全部楼层
s = 'http://1.google.com http://2.www.google.com http://3.code.google.com http://4.www.code.google.com'
要达到的效果
[('1.', 'google.com'), ('2.', 'google.com'), ('3.', 'google.com'), ('4.', 'google.com')]
写写试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-20 17:55:30 | 显示全部楼层
学习下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-20 18:05:13 | 显示全部楼层
yjsx86 发表于 2017-12-20 17:00
s = 'http://1.google.com http://2.www.google.com http://3.code.google.com http://4.www.code.google.c ...

TIM截图20171220180002.png 和你说的不一样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-20 20:40:49 | 显示全部楼层    本楼为最佳答案   
桦少 发表于 2017-12-20 18:05
和你说的不一样

import re
s = 'http://1.google.com http://2.www.google.com http://3.code.google.com http://4.www.code.google.com'
recom = re.compile(r'(\d\.)(?:\w+\.)*(\w+\.com)')
print(recom.findall(s))
有些时候不得不分组但是又不想保存的时候就用(?:)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-21 16:36:30 | 显示全部楼层
yjsx86 发表于 2017-12-20 20:40
import re
s = 'http://1.google.com http://2.www.google.com http://3.code.google.com http://4.www. ...
  1. data ='''sihua wu 1 3  liumen zi 2 2  jeear lisn 3 1'''
  2. reg = r'(\w+)\s(\w+)\s(?:\d)\s(\d)'
  3. print re.findall(reg,data)
复制代码

我明白你的意思了,就是当我要匹配的时候,类似于上面我要匹配输出的是(sihua wu+第二个数)但是由于第一个数字在前面,所以我要加上第一个数的匹配规则\d,但是它会显示出来,然后我在这个前面加上?:变成(?:\d),然后就可以了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-4 23:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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