re反选
本帖最后由 suchocolate 于 2020-4-28 22:43 编辑假如我有段字符串,我想用re.findall过滤出不包括beijing的行,该如何写?
str1 = '''
iueiruwprupiowueiopr
qiproiepogdfjdljfdfjbeijingskjdfjklsdjfl
beijingsjypoiptoiuptoyiupoitpyou
skjdfkjalsjdfjbeijing
kkkkkksssss
nxcvjgldkjfjgdfjg
'''
我这样写所有的都匹配了:
result = re.findall('.*(?!beijing).*', str1)
print(result)结果:
C:\d\fishc\venv\Scripts\python.exe C:/d/fishc/bbs/0428/1.py
['', 'iueiruwprupiowueiopr', '', 'qiproiepogdfjdljfdfjbeijingskjdfjklsdjfl', '', 'beijingsjypoiptoiuptoyiupoitpyou', '', 'skjdfkjalsjdfjbeijing', '', 'kkkkkksssss', '', 'nxcvjgldkjfjgdfjg', '', '']
你可以选出包含的行,然后读取的时候控制一下就行了 result = re.findall('(.*beijing.*)', str1)
改成这样就好呀 本帖最后由 _2_ 于 2020-4-29 11:04 编辑
>>> str1 = '''iueiruwprupiowueiopr
qiproiepogdfjdljfdfjbeijingskjdfjklsdjfl
beijingsjypoiptoiuptoyiupoitpyou
skjdfkjalsjdfjbeijing
kkkkkksssss
nxcvjgldkjfjgdfjg'''
>>> # 我用的推导式进行过滤,不一定全部适用
['iueiruwprupiowueiopr', 'kkkkkksssss', 'nxcvjgldkjfjgdfjg']
>>> 本帖最后由 _2_ 于 2020-4-29 11:00 编辑
Twilight6 发表于 2020-4-29 10:32
改成这样就好呀
...... 这个用正则不太好写,还要考虑 re 的拓展语法,只用 Python 原生的字符串方法就能实现 本帖最后由 Twilight6 于 2020-4-29 10:53 编辑
_2_ 发表于 2020-4-29 10:46
如果这样,那么:
和
你先复制去运行下....
.匹配除换行符
*匹配0个到多个
完全符合条件
结果:
['qiproiepogdfjdljfdfjbeijingskjdfjklsdjfl', 'beijingsjypoiptoiuptoyiupoitpyou', 'skjdfkjalsjdfjbeijing'] 本帖最后由 _2_ 于 2020-4-29 10:59 编辑
Twilight6 发表于 2020-4-29 10:52
你先复制去运行下....
.匹配除换行符
>>> result = re.findall('(.*beijing.*)', str1)
>>> result
['qiproiepogdfjdljfdfjbeijingskjdfjklsdjfl', 'beijingsjypoiptoiuptoyiupoitpyou', 'skjdfkjalsjdfjbeijing']
>>> _2_ 发表于 2020-4-29 10:54
>>> result = re.findall('(.*beijing.*)', str1)
>>> result
['qiproiepogdfjdljfdfjbeijingskjdfjkls ...
对的~是不是除了有beijing的都过滤了 Twilight6 发表于 2020-4-29 10:55
对的~是不是除了有beijing的都过滤了
人家要的是不含 beijing 的 _2_ 发表于 2020-4-29 10:58
人家要的是不含 beijing 的
假如我有段字符串,我想用re.findall过滤出不包括beijing的行,该如何写?
是过滤不包括的哦 本帖最后由 _2_ 于 2020-4-29 12:47 编辑
Twilight6 发表于 2020-4-29 11:01
假如我有段字符串,我想用re.findall过滤出不包括beijing的行,该如何写?
是过滤不包括的哦
^ _2_ 发表于 2020-4-29 11:02
^
哈哈哈我好像也懵了,好像是我理解错了
不管了编辑下两种都写上去 Twilight6 发表于 2020-4-29 11:04
哈哈哈我好像也懵了,好像是我理解错了
不管了编辑下两种都写上去
你好像是以前发那个 PyCharm & Anaconde 的那个人(如果我没记错的话) _2_ 发表于 2020-4-29 11:08
你好像是以前发那个 PyCharm & Anaconde 的那个人(如果我没记错的话)
{:10_245:}嗯嗯,感觉有点慌(发生什么了) Twilight6 发表于 2020-4-29 11:04
哈哈哈我好像也懵了,好像是我理解错了
不管了编辑下两种都写上去
用 ^ 反选
你没听明白 变通可以不:
>>> str1
'\niueiruwprupiowueiopr\nqiproiepogdfjdljfdfjbeijingskjdfjklsdjfl\nbeijingsjypoiptoiuptoyiupoitpyou\nskjdfkjalsjdfjbeijing\nkkkkkksssss\nnxcvjgldkjfjgdfjg\n'
>>> list(filter(lambda n:n not in re.findall(".*beijing.*",str1,re.M),re.findall(".+",str1,re.M)))
['iueiruwprupiowueiopr', 'kkkkkksssss', 'nxcvjgldkjfjgdfjg']
>>> 这样试试.
kaohsing 发表于 2020-4-29 16:13
这样试试.
感谢,这个可以。
另外我试了试贪婪,也是可以的。
re.findall(r'^(?!.*beijing)\w+', str1, re.M) wp231957 发表于 2020-4-29 14:36
变通可以不:
谢谢。
这个让我想起了filter,都忘记了还有这个。
页:
[1]