鱼C论坛

 找回密码
 立即注册
查看: 929|回复: 19

[已解决]re反选

[复制链接]
发表于 2020-4-28 22:39:12 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 suchocolate 于 2020-4-28 22:43 编辑

假如我有段字符串,我想用re.findall过滤出不包括beijing的行,该如何写?
str1 = '''
iueiruwprupiowueiopr
qiproiepogdfjdljfdfjbeijingskjdfjklsdjfl
beijingsjypoiptoiuptoyiupoitpyou
skjdfkjalsjdfjbeijing
kkkkkksssss
nxcvjgldkjfjgdfjg
'''
我这样写所有的都匹配了:
  1. result = re.findall('.*(?!beijing).*', str1)
  2. print(result)
复制代码
结果:
  1. C:\d\fishc\venv\Scripts\python.exe C:/d/fishc/bbs/0428/1.py
  2. ['', 'iueiruwprupiowueiopr', '', 'qiproiepogdfjdljfdfjbeijingskjdfjklsdjfl', '', 'beijingsjypoiptoiuptoyiupoitpyou', '', 'skjdfkjalsjdfjbeijing', '', 'kkkkkksssss', '', 'nxcvjgldkjfjgdfjg', '', '']
复制代码



最佳答案
2020-4-29 16:13:11
这样试试.


1.png

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2020-4-29 08:34:38 | 显示全部楼层
你可以选出包含的行,然后读取的时候控制一下就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 10:32:06 | 显示全部楼层
  1. result = re.findall('(.*beijing.*)', str1)
复制代码

改成这样就好呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 10:43:55 | 显示全部楼层
本帖最后由 _2_ 于 2020-4-29 11:04 编辑
  1. >>> str1 = '''iueiruwprupiowueiopr
  2. qiproiepogdfjdljfdfjbeijingskjdfjklsdjfl
  3. beijingsjypoiptoiuptoyiupoitpyou
  4. skjdfkjalsjdfjbeijing
  5. kkkkkksssss
  6. nxcvjgldkjfjgdfjg'''
  7. >>> [i for i in str1.split("\n") if i.find("beijing") == -1] # 我用的推导式进行过滤,不一定全部适用
  8. ['iueiruwprupiowueiopr', 'kkkkkksssss', 'nxcvjgldkjfjgdfjg']
  9. >>>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 10:46:27 | 显示全部楼层
本帖最后由 _2_ 于 2020-4-29 11:00 编辑


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

使用道具 举报

发表于 2020-4-29 10:47:50 | 显示全部楼层
这个用正则不太好写,还要考虑 re 的拓展语法,只用 Python 原生的字符串方法就能实现
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 10:52:13 | 显示全部楼层
本帖最后由 Twilight6 于 2020-4-29 10:53 编辑
_2_ 发表于 2020-4-29 10:46
如果这样,那么:



你先复制去运行下....

.匹配除换行符
*匹配0个到多个
完全符合条件

结果:
  1. ['qiproiepogdfjdljfdfjbeijingskjdfjklsdjfl', 'beijingsjypoiptoiuptoyiupoitpyou', 'skjdfkjalsjdfjbeijing']
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 10:54:04 | 显示全部楼层
本帖最后由 _2_ 于 2020-4-29 10:59 编辑
Twilight6 发表于 2020-4-29 10:52
你先复制去运行下....

.匹配除换行符


>>> result = re.findall('(.*beijing.*)', str1)
>>> result
['qiproiepogdfjdljfdfjbeijingskjdfjklsdjfl', 'beijingsjypoiptoiuptoyiupoitpyou', 'skjdfkjalsjdfjbeijing']
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 10:55:22 | 显示全部楼层
_2_ 发表于 2020-4-29 10:54
>>> result = re.findall('(.*beijing.*)', str1)
>>> result
['qiproiepogdfjdljfdfjbeijingskjdfjkls ...

对的~是不是除了有beijing的都过滤了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 10:58:24 | 显示全部楼层
Twilight6 发表于 2020-4-29 10:55
对的~是不是除了有beijing的都过滤了


人家要的是不含 beijing 的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 11:01:44 | 显示全部楼层
_2_ 发表于 2020-4-29 10:58
人家要的是不含 beijing 的


假如我有段字符串,我想用re.findall过滤出不包括beijing的行,该如何写?

是过滤不包括的哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 11:02:45 | 显示全部楼层
本帖最后由 _2_ 于 2020-4-29 12:47 编辑
Twilight6 发表于 2020-4-29 11:01
假如我有段字符串,我想用re.findall过滤出不包括beijing的行,该如何写?

是过滤不包括的哦


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

使用道具 举报

发表于 2020-4-29 11:04:28 | 显示全部楼层


哈哈哈  我好像也懵了,好像是我理解错了

不管了  编辑下两种都写上去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 11:08:44 | 显示全部楼层
Twilight6 发表于 2020-4-29 11:04
哈哈哈  我好像也懵了,好像是我理解错了

不管了  编辑下两种都写上去

你好像是以前发那个 PyCharm & Anaconde 的那个人(如果我没记错的话
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 11:12:32 | 显示全部楼层
_2_ 发表于 2020-4-29 11:08
你好像是以前发那个 PyCharm & Anaconde 的那个人(如果我没记错的话)

嗯嗯,感觉有点慌(发生什么了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 12:47:31 From FishC Mobile | 显示全部楼层
Twilight6 发表于 2020-4-29 11:04
哈哈哈  我好像也懵了,好像是我理解错了

不管了  编辑下两种都写上去

用 ^ 反选
你没听明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 14:36:14 | 显示全部楼层
变通可以不:

  1. >>> str1
  2. '\niueiruwprupiowueiopr\nqiproiepogdfjdljfdfjbeijingskjdfjklsdjfl\nbeijingsjypoiptoiuptoyiupoitpyou\nskjdfkjalsjdfjbeijing\nkkkkkksssss\nnxcvjgldkjfjgdfjg\n'
  3. >>> list(filter(lambda n:n not in re.findall(".*beijing.*",str1,re.M),re.findall(".+",str1,re.M)))
  4. ['iueiruwprupiowueiopr', 'kkkkkksssss', 'nxcvjgldkjfjgdfjg']
  5. >>>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 16:13:11 | 显示全部楼层    本楼为最佳答案   
这样试试.


1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-29 17:35:24 | 显示全部楼层

感谢,这个可以。
另外我试了试贪婪,也是可以的。
  1. re.findall(r'^(?!.*beijing)\w+', str1, re.M)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-29 17:36:50 | 显示全部楼层

谢谢。
这个让我想起了filter,都忘记了还有这个。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 16:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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