suchocolate 发表于 2020-4-28 22:39:12

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', '', '']


BngThea 发表于 2020-4-29 08:34:38

你可以选出包含的行,然后读取的时候控制一下就行了

Twilight6 发表于 2020-4-29 10:32:06

result = re.findall('(.*beijing.*)', str1)
改成这样就好呀

_2_ 发表于 2020-4-29 10:43:55

本帖最后由 _2_ 于 2020-4-29 11:04 编辑

>>> str1 = '''iueiruwprupiowueiopr
qiproiepogdfjdljfdfjbeijingskjdfjklsdjfl
beijingsjypoiptoiuptoyiupoitpyou
skjdfkjalsjdfjbeijing
kkkkkksssss
nxcvjgldkjfjgdfjg'''
>>> # 我用的推导式进行过滤,不一定全部适用
['iueiruwprupiowueiopr', 'kkkkkksssss', 'nxcvjgldkjfjgdfjg']
>>>

_2_ 发表于 2020-4-29 10:46:27

本帖最后由 _2_ 于 2020-4-29 11:00 编辑

Twilight6 发表于 2020-4-29 10:32
改成这样就好呀

......

_2_ 发表于 2020-4-29 10:47:50

这个用正则不太好写,还要考虑 re 的拓展语法,只用 Python 原生的字符串方法就能实现

Twilight6 发表于 2020-4-29 10:52:13

本帖最后由 Twilight6 于 2020-4-29 10:53 编辑

_2_ 发表于 2020-4-29 10:46
如果这样,那么:




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

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

结果:
['qiproiepogdfjdljfdfjbeijingskjdfjklsdjfl', 'beijingsjypoiptoiuptoyiupoitpyou', 'skjdfkjalsjdfjbeijing']

_2_ 发表于 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']
>>>

Twilight6 发表于 2020-4-29 10:55:22

_2_ 发表于 2020-4-29 10:54
>>> result = re.findall('(.*beijing.*)', str1)
>>> result
['qiproiepogdfjdljfdfjbeijingskjdfjkls ...

对的~是不是除了有beijing的都过滤了

_2_ 发表于 2020-4-29 10:58:24

Twilight6 发表于 2020-4-29 10:55
对的~是不是除了有beijing的都过滤了

人家要的是不含 beijing 的

Twilight6 发表于 2020-4-29 11:01:44

_2_ 发表于 2020-4-29 10:58
人家要的是不含 beijing 的

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

是过滤不包括的哦

_2_ 发表于 2020-4-29 11:02:45

本帖最后由 _2_ 于 2020-4-29 12:47 编辑

Twilight6 发表于 2020-4-29 11:01
假如我有段字符串,我想用re.findall过滤出不包括beijing的行,该如何写?

是过滤不包括的哦

^

Twilight6 发表于 2020-4-29 11:04:28

_2_ 发表于 2020-4-29 11:02
^

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

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

_2_ 发表于 2020-4-29 11:08:44

Twilight6 发表于 2020-4-29 11:04
哈哈哈我好像也懵了,好像是我理解错了

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

你好像是以前发那个 PyCharm & Anaconde 的那个人(如果我没记错的话)

Twilight6 发表于 2020-4-29 11:12:32

_2_ 发表于 2020-4-29 11:08
你好像是以前发那个 PyCharm & Anaconde 的那个人(如果我没记错的话)

{:10_245:}嗯嗯,感觉有点慌(发生什么了)

_2_ 发表于 2020-4-29 12:47:31

Twilight6 发表于 2020-4-29 11:04
哈哈哈我好像也懵了,好像是我理解错了

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

用 ^ 反选
你没听明白

wp231957 发表于 2020-4-29 14:36:14

变通可以不:

>>> 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:11

这样试试.


suchocolate 发表于 2020-4-29 17:35:24

kaohsing 发表于 2020-4-29 16:13
这样试试.

感谢,这个可以。
另外我试了试贪婪,也是可以的。
re.findall(r'^(?!.*beijing)\w+', str1, re.M)

suchocolate 发表于 2020-4-29 17:36:50

wp231957 发表于 2020-4-29 14:36
变通可以不:

谢谢。
这个让我想起了filter,都忘记了还有这个。
页: [1]
查看完整版本: re反选